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
多谢分享