我测试了Cube下STM32F030的DMA接收串口数据函数,如下 HAL_UART_Receive_DMA(&huart1, RxDatabuf, 32); 如果该函数被调用前,串口已经发生数据溢出,则调用该函数,DMA接收将不会正常启动,只接收1个字符,然后卡住这无法运行,无论是否重新调用该函数,都继续卡着,包括调用HAL_UART_DMAStop(&huart1) 也无济于事。 解决办法还没有仔细研究,但重新初始化串口之后可以继续运行。还没测试直接清除串口溢出位标志是否可行,但直接操作寄存器有违HAL的初衷。 如果可能的话,ST的cube能否修正一下呢?HAL用的人越来越多了,不知道其他型号是否也存在这个问题。 |
stlink V3mini 调试器不能识别stm32f030F4P6芯片,有解决办法吗?
STM32F0 SMBus 中断怎么开启
STM32F072 无法清除EXTI4_15_IRQn pending标志,导致无法进入stop模式
基于GCC编译器的initcall在STM32如何实现?
想找一款pin to pin的MCU(参考STM32F105RC),支持CAN FD的,64PIN封装,各位小伙伴们有推荐吗
L9663如何使用上行缓冲区发送同步脉冲
如何使用定时器在任意IO输出PWM
下载到flash无法运行,开调试就能成功,是什么问题?
STM32是小端模式,但为什么Keil中memory窗口和反汇编窗口的32位指令不一致?
各位朋友,有没有STM32F0系列教程,最好是汇编语言的。
HAL越来越强大,跨芯片平台,统一了STM32F系列的所有芯片,代码迁移很容易,只是现在bug还较多
我发现如果在开启DMA接收前,已经使能了串口接收就有可能出现接收溢出。解决办法就是调用了HAL_UART_Receive_DMA函数后再使能串口接收。
方法一、数据发送时串口只配置为UART_MODE_TX,收据接收时串口配置为UART_MODE_RX或UART_MODE_TX_RX。
方法二、以#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE)为原型,建立串口接收和发送使能失效功能函数,随时可用。
#define __HAL_UART_TX_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_TE)
#define __HAL_UART_TX_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_TE)
但是对于不定长的数据,超时时间设置多长是个问题
您好,我这边用F030时串口也存在问题,我重新初始化串口,发现死机了?请问如何重新初始化串口,想借鉴初始化那部分程序