haitio-33754 发表于 2015-12-10 10:43:33

光环 发表于 2015-12-9 16:40
刚接触STM32 ,试验了一下楼主程序,每次重启MCU后,第一次向mcu发送数据,收不到,从第二次以后就正常了。 ...

                temp = huart1.Instance->SR;      这里的赋值是什么意义?
                temp = huart1.Instance->DR;      这里的赋值是什么意义?
这不是赋值,这是STM32的寄存器操作方式,先读uart的SR寄存器,再读DR寄存器,可以清除某些标志位。
但是我也不清楚为啥要在这里清除这些标志位呢。按照我的理解,楼主可能是想把IDLE标志位给清除掉,但是前面不是已经调用 __HAL_UART_CLEAR_IDLEFLAG(&huart1)这个函数清除掉了么?为什么重新来一次呢?

光环 发表于 2015-12-10 11:22:13

本帖最后由 光环 于 2015-12-10 11:27 编辑

haitio-33754 发表于 2015-12-10 10:43
temp = huart1.Instance->SR;      这里的赋值是什么意义?
                temp = hua ...
感谢,明白了,是为了清除标志,谢谢你。另外我试验了一下:
1、注释掉这两句也能正常接收。
2、我将 HAL_UART_Receive_DMA(&huart1,rx_buffer,BUFFER_SIZE); 放到while(1)前面(只执行一次)也可以正常接收。

quanqiuying 发表于 2015-12-28 11:37:01

要用循环模式

飘云-356085 发表于 2016-3-1 15:51:07

谢谢楼主分享。支持

ontot 发表于 2016-4-14 14:14:53

我正在写这个程序,今天下午正在想怎么解决这个问题呢,刚刚好想法不谋而合。你那个长度获取对我来说也有吸引力。这个用在485上完美了。C:\Users\Tsar\Desktop\2016-04-14_141327.png

mjun5210 发表于 2016-6-23 16:58:04

你们用空闲中断,会不会丢数据?我的丢数据很严重。

mjun5210 发表于 2016-6-23 16:58:20

你们用空闲中断,会不会丢数据?我的丢数据很严重。

efree 发表于 2016-7-25 16:39:13

好资料。顶一下。

dongyichen 发表于 2016-10-26 14:22:33

我的也用DMA加串口空闲接收数据,也丢失很严重,不知道为啥呢。待会我上传下代码,各位看下

ynwscfsfi 发表于 2016-10-26 14:37:39


多谢分享
页: 1 2 [3] 4 5 6 7 8 9
查看完整版本: Cube下实现串口+DMA+空闲中断接收不定长数据