你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 hal 库无法接收串口数据

[复制链接]
cyang 提问时间:2018-3-11 14:13 /
型号:STM32L432KC官方开发板
串口使用的是板载的USB下载口以及串口

用法:
在串口初始化后,while(1)之前调用 接收中断函数 HAL_UART_Receive_IT(),接收一个字节产生中断。在接收中断回调函数中处理保存数据并重新开启接收一个字节的中断。
回掉函数的代码:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)  
{  
//                printf("rx callback!\n");

                buf[cnt++] = data;
               
    uint8_t ret = HAL_OK;  
    /* Set transmission flag: trasfer complete*/  
    do  
    {  
        ret = HAL_UART_Receive_IT(UartHandle, (uint8_t *)&data, 1);  
    }while(ret != HAL_OK);  
}



现象:
上电后会产生一次串口中断,进入这个函数。但此时并没有发送数据。

另外,后续发送任何数据都没有反应。无法产生中断。





收藏 评论10 发布时间:2018-3-11 14:13

举报

10个回答
七哥 回答时间:2018-3-11 16:58:35
先跑个样例程序,不要想当然。


安装个STM32Cube_FW_L4库,然后跑跑样例程序“STM32Cube_FW_L4_V1.11.0\Projects\NUCLEO-L432KC\Examples\UART\UART_TwoBoards_ComIT”



傲游截图20180311165315.jpg


评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

wenyangzeng 回答时间:2018-3-11 17:42:05
__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
就OK了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

cyang 回答时间:2018-3-12 09:12:06
toofree 发表于 2018-3-11 16:58
先跑个样例程序,不要想当然。

主要是这些都是两块板之间通信的。另外都是在主函数之前就通信完成,while(1)里面不进行操作的那种。
cyang 回答时间:2018-3-12 09:13:31
wenyangzeng 发表于 2018-3-11 17:42
__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
就OK了。

就是说在回掉函数中只用再次开启这个,不用重新使用HAL_UART_Receive_IT()?
wudianjun2001 回答时间:2018-3-12 09:43:11
最好不好在中断里死循环,还是先搞个例程跑一下,然后在例程的基础上修改

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-3-12 09:46:06
C_YANG_HEN 发表于 2018-3-12 09:13
就是说在回掉函数中只用再次开启这个,不用重新使用HAL_UART_Receive_IT()?

主函数中调用一次就够了
cyang 回答时间:2018-3-12 18:05:07
wenyangzeng 发表于 2018-3-12 09:46
主函数中调用一次就够了

这样子不能再次接收下一次的数据
cyang 回答时间:2018-3-12 18:06:05
wudianjun2001 发表于 2018-3-12 09:43
最好不好在中断里死循环,还是先搞个例程跑一下,然后在例程的基础上修改 ...

我用这样的方式在STM32F469Discovery官方板上是可以的。连续的接收数据。
wenyangzeng 回答时间:2018-3-12 19:25:43
C_YANG_HEN 发表于 2018-3-12 18:05
这样子不能再次接收下一次的数据

初始化串口后调用,并不是在回调函数里调用的。
cyang 回答时间:2018-3-13 09:08:53
wenyangzeng 发表于 2018-3-12 19:25
初始化串口后调用,并不是在回调函数里调用的。

看网上的帖子是说需要在回掉中再次使能,我自己在STM32F469上实验了也是这样,就是在STM32L432KC上有问题。
http://www.cnblogs.com/Mysterious/p/4804188.html

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版