你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
smare 发表于 2015-7-31 20:27 正需要这个。明天测试一下楼主的方法。谢谢
wjjontheway 发表于 2015-7-30 17:16 按HAL的回调方式写,是指在HAL_UART_IRQHandler()中添加 tmp1 = __HAL_UART_GET_FLAG(huart, UART_F ...
光环 发表于 2015-12-9 16:40 刚接触STM32 ,试验了一下楼主程序,每次重启MCU后,第一次向mcu发送数据,收不到,从第二次以后就正常了。 ...
haitio-33754 发表于 2015-12-10 10:43 temp = huart1.Instance->SR; 这里的赋值是什么意义? temp = hua ...
行,测完有什么考虑不周全的地方一起聊聊,我也只是大概弄了下,后面串口接收的时候说不定会出什么问题。我的回调函数还没有定义。
你可以把HAL_UART_Receive_DMA(&huart1,rx_buffer,BUFFER_SIZE);放在 if里面 初始化也要开启一次
}
另外:下面不理解的地方,请教:
if((tmp_flag != RESET))
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
temp = huart1.Instance->SR; 这里的赋值是什么意义?
temp = huart1.Instance->DR; 这里的赋值是什么意义?
HAL_UART_DMAStop(&huart1);
temp = hdma_usart1_rx.Instance->NDTR;
rx_len = BUFFER_SIZE - temp;
recv_end_flag = 1;
}
刚接触STM32,请问见笑。
temp = huart1.Instance->SR; 这里的赋值是什么意义?
temp = huart1.Instance->DR; 这里的赋值是什么意义?
这不是赋值,这是STM32的寄存器操作方式,先读uart的SR寄存器,再读DR寄存器,可以清除某些标志位。
但是我也不清楚为啥要在这里清除这些标志位呢。按照我的理解,楼主可能是想把IDLE标志位给清除掉,但是前面不是已经调用 __HAL_UART_CLEAR_IDLEFLAG(&huart1)这个函数清除掉了么?为什么重新来一次呢?
感谢,明白了,是为了清除标志,谢谢你。另外我试验了一下:
1、注释掉这两句也能正常接收。
2、我将 HAL_UART_Receive_DMA(&huart1,rx_buffer,BUFFER_SIZE); 放到while(1)前面(只执行一次)也可以正常接收。
多谢分享