LSM6DS3TR-C静止情况下使用MotionFX固件算出的欧拉角周期性异常跳动
STM32H7A3RGT6 ADC 8位采样速度只能达到3.5MSPS达不到数据手册上的7MSPS ?
全球论坛无法登录
DMAMUX 使用内部外设Request Event(不使用TIM12和LPTIM)
STM32F429使用FMC接口扩展SDRAM
用STM32F407做U盘拖拽升级,目前BootLoader和实现U盘,后面就不知道怎么操作了。
STM32上电后会多次进入所有打开的定时器回调函数中,如何避免这样的情况?
STM32F427VIT6这款芯片所支持的摄像头模组的列表有不?
CUBEMX配置G474串口DMA传输,为什么接收正常发送不了?
STM32F407 FLASH写入超过最大空间依旧能成功。
微信公众号
手机版
具体你这里,应该是DMA半完成中断进了一次,我们的库代码就是这样设计的。
DMA半完成中断也是默认开启的。
其实你很好验证这点,比方DMA长度1024不变,你一次性数据只发送 不超过512的数据看看。
或者用另一个STM32F4当主机发送数据试试看。
目前我是通过电脑抓包工具,520个字节是一次性发送的。的确没考虑到用其他stm32 发送数据,现在我短接rx与tx 看下结果
把空闲中断关了
使用短接rx与tx 问题依旧存在,示波器抓取波形,串口发送数据,字节与字节之间并未出现明显断帧现象,怀疑可能是本身芯片的闲时中断就设置了最大接收长度,但在勘误手册都没提到这点
关闲时中断那肯定没问题的,我定时器轮询读取dma接收剩余长度是正常的
rx对应的寄存器是固定的,DMA就是把这个往外面搬运怎么会有上限呢
DMA通道最大搬运65535个
DMA使用基本的单次字节采集模式,开启接收如下所示:HAL_UARTEx_ReceiveToIdle_DMA(&huart3,(uint8_t *)g_u8RxData,USART_RX_MAX);
串口闲时中断数据:在void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)中实现原理如下:
HAL_UART_AbortReceive(&huart3);//关闭串口DMA接收 g_u16RxCnt=USART_RX_MAX-__HAL_DMA_GET_COUNTER(&hdma_usart3_rx);//获取DMA接收的数据长度
HAL_UARTEx_ReceiveToIdle_DMA(&huart3,(uint8_t *)g_u8RxData,USART_RX_MAX);//重新开始接收数据
以上操作发现上位机一次发送520个字节数据后,串口中断进入了两次,获取DMA接收的数据长度分别位272,248。使用的芯片为STM32F407ZGT6,主频168MHz,大家有条件可以试试
的确,DMA半完成中断很有说服性,我先看下代码,再修改最大接收长度试试。
其实 我昨天已经验证过了。你可以再验证下。
的确,重新看了一下代码,在半完成中断事件中也实现了void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size),所有我在开启DMA闲时中断后,关闭了半完成中断,解决问题。
65535个是字节还是位 啊?
65535个数据,肯定不是65535个位,可能是字节、半字、字。但某些STM32系列统一为字节个数。你要适当看看相应的手册。