STM32F407使用LAN8720A进行网口通信
求问诡异的问题,eth网口ping不通
STM32F407 Flash 故障
USBX在F407上创建CDC不能正常使用
STM32F407 音频输入输出时 IFFT 无法正常工作
ai部署
keil有什么调试方法可以追踪链表被破坏的地方吗
无法通过 SPI 读取 TCD1304数据
MotorControl Workbench 6.4.1 生成 FOC 项目代码后运行死机。
F407的SDIO的硬件分流问题
微信公众号
手机版
具体你这里,应该是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系列统一为字节个数。你要适当看看相应的手册。