STM32u575 USART 用GPDMA接收,DMA中断,usart 中断正常来,ROR数据正确,接收缓冲却不变
stm32h7 定时器输出比较模式+dma,生成脉冲异常
STM32G030F6串口空闲中断配置卡死
3.3v单片机能刷写1.8v的spi flash吗?
STM32CubeMX配置STM32F103C8T6 RTC分频器问题
STM32F103RCT6断电以后,ADC会漏电
STM32H725VGT3内存不足问题
STM32H7A3 怎样配置MDMA的硬件触发MDMA_REQUEST_DMA1_Stream0_TC将数据再次转运
STM32F103VCT6通过串口1烧录程序问题
串口DMA收发出现ORE错误
微信公众号
手机版
肯定有啊,空闲接收又不是什么高级功能,DMA 空闲中断不是 DMA 的中断,是串口的中断,楼上已经把函数贴出来了,就是那个。
如果接收的时钟偏离慢点,idle帧后面紧跟着一个字符的话,这样的条件会接收不到空闲帧。
首选感谢热心转接的回复。
我用的是:HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rx_data, 10);启动
回调是这个函数:
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { printf("%s\r\n",rx_data); if (huart->Instance == USART2) { LED_ON; // 处理接收到的数据 if ( (Size > 2) && (Size <= 10) ) { HAL_UART_Transmit(&huart2, rx_data, Size ,0xFF); rx_Recieved = 1; } HAL_UART_DMAStop(huart); } LED_OFF; }
采用同一端口收发,收到后直接原样返回。手动发送,单次一个整数,不大于5位数。
总是不进中断。
STM32f103芯片的UART肯定支持空闲事件及中断;
目前你调用的API函数没有啥问题,你确认下调用前是否使能了空闲中断:
__HAL_UART_CLEAR_IDLEFLAG(huart);
ATOMIC_SET_BIT(UartHandle.Instance->CR1, USART_CR1_IDLEIE);
另外,你现在总不进中断,确认下是否开启了相关UART的中断功能,
使用CubeMx的话,做下勾选即可。借助调试不难很快找到原因的。
[md]问题找到了,103确实没有
“HAL_UARTEx_ReceiveToIdle”
这个函数以及回调。
验证自己做中断程序是可以的,有空闲中断功能,但不支持这个函数以及相应的回调。
另外,UART1-3都是可以的,但同样的程序,UART4不能用,将USART改成UART也不行。
[md]1、不知你是使用标准库还是Cube HAL库,如果是前者是否有这个HAL_UARTEx_ReceiveToIdle()函数我不确定了,你自行确认即可。 如果是HAL库,这个API函数肯定是有的,除非你的版本很老旧。
2、对于STM32F103系列,我不知你完整料号,那些小封装是没有UART4/5的。
[md]感谢热心答复!
我说的很清楚,UART1-3都是可以的,————不是程序问题!!!
但同样的程序,UART4不能用,将USART改成UART也不行。因为我的103板子上的RS485接的是UART4,所以我只能试试UART4。