HAL驱动的串口编程陷阱
http://bbs.elecfans.com/jishu_464356_1_1.html
手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口。
使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据。
使用STM32F103传统驱动,一点问题没有,改到HAL怎么就不行了呢?经过一周的调试终于找到了问题所在.
首先看STM32F103传通驱动的代码:
/** USART1 GPIO Configuration PA9 ------> USART1_TXPA10 ------> USART1_RX*//*Configure GPIO pin : PA */GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);/*Configure GPIO pin : PA */GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStruct);
在传通驱动下我们配置IO的时候,
对于TX 我们配置GPIO_Mode为GPIO_Mode_AF_PP,
对于RX我们配置GPIO_Mode为GPIO_Mode_IN_FLOATING。
有时候人有惯性思维认为理所应当的在HAL里也应该一样,我就是在这个地方栽了跟头。
在HAL驱动方式里,RX,TX 必须都配置成GPIO_MODE_AF_PP。
代码如下:用HAL驱动时
/**USART2 GPIO Configuration PA2 ------> USART2_TXPA3 ------> USART2_RX */GPIO_InitStruct.Pin = GPIO_PIN_2;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FAST;GPIO_InitStruct.Alternate = GPIO_AF4_USART2;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_3;//GPIO_InitStruct.Mode = GPIO_MODE_INPUT;(这句千万不能要)GPIO_InitStruct.Alternate = GPIO_AF4_USART2;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
希望能给后面的人提供点经验,少走弯路。
HAL驱动的串口编程陷阱相关推荐
- 树莓派UART串口编程--使用wiringPi库-C开发【2-修改驱动】
一.前言 上一篇博文记录了使用wiringPi提供的串口驱动wiringSerial.c wiringSerial.h,并基于该驱动对串口进行简单的通信,测试中发现该串口的驱动比较简单,接收数据会存在 ...
- linux设备驱动,tty串口编程 如何查看linux下串口是否可用?串口名称等
如何查看linux下串口是否可用?串口名称等? http://zhidao.baidu.com/question/419148559.html 查看串口是否可用,可以对串口发送数据比如对com1口,e ...
- 基于标准库函数与基于HAL库函数的stm32编程方式
文章目录 基于标准库函数与基于HAL库函数的stm32编程方式 一.基于标准库 1. 介绍 2. 库函数的STM32串口程序编写 二.基于HAL库 1.介绍 2.HAL库STM32串口程序编写 三.差 ...
- 课程 | 基于STM32CubeMX和HAL驱动库的嵌入式系统设计
帮成都这边一位老师友情分享一篇免费课程:基于STM32CubeMX和HAL驱动库的嵌入式系统设计. 如果想学习本课程,可以从文末给出的链接,或底部"阅读原文"进入报名,免费学习. ...
- 【linux】串口编程(一)——配置串口
目前遇到的串口编程都是用于通信,很少作为终端显示.以前没有对串口编程做深入研究,本次以libmodbus源码中对串口的设置为例,详解总结串口编程时配置的属性(struct termios) 以libm ...
- 基于MFC串口编程和曲线图绘制(visual studio2008,Teechart绘图控件)的程序总结
前言 今年刚进入公司按经理的要求为底盘测控机写了一个小小的console.这也是第一次教认真的完成整个程序的编写.程序不大,所用技术比较基础也不前卫,属于初级程序员的练手程序(知识的整理和搬运).虽然 ...
- Linux 串口编程四 串口设备程序开发
Linux 串口编程和程序相对来说是很简单的,之所以用博客连载来展示,主要是想在学会使用的基础上掌握相关背景,原理以及注意事项.相信在遇到问题的时候,我们就不会对于技术的概念和 API 的使用浅尝辄止 ...
- Linux 串口编程二 深入了解 termios
前言 这一系列串口编程重点在应用层编程,但是在讲解原理与相关概念时需要对驱动框架有个基础的认识.如果只是浅尝辄止,以后在遇到串口驱动与应用层程序调试难免遇到瓶颈.关于 tty驱动架构参见我的其他博客: ...
- Linux 串口编程一 一些背景
在大部分讲解 Linux 编程书籍的时候会发现没有单独的串口编程章节,实际上串口编程已经被概括在了"终端"或者"终端IO"章节里面.在上一篇博客中对经常出现的几 ...
最新文章
- “编程能力差,90%的人会输在这点上!”谷歌开发:其实都是在瞎努力
- AtCoder Beginner Contest 197 题解(A ~ F)
- 小学校园里计算机文字,中小学计算机教学论文(共2228字).doc
- TCP,IP,HTTP,SOCKET区别和联系
- 如何修改IE浏览器的User-Agent用户代理字符串信息
- 配置 --- vscode中react格式化解决方案
- Spring IOC容器和获取组件对象源码分析
- c++利用初始化列表在类内部和类外部定义构造函数的区别
- 摩拜APP、小程序停服 摩拜单车全面接入美团
- python中set集合_Python中的SET集合操作
- Texpad for Mac(LaTeX编辑器软件)
- 完整的python项目实例-python完整项目
- 苹果计算机使用方法,苹果电脑系统使用教程_初次使用苹果电脑教程-win7之家
- java sqlite读取数据库_java如何读写sqlite数据库
- 微信小程序页面跳转时数据传输
- 深度学习-训练集图片输入神经网络前的标准化(附代码)
- java openni rgb显示_3D将深度映射到RGB(Kinect OpenNI Depthmap到OpenCV RGB Cam)
- 《沈剑架构师训练营》第7章 - 架构解耦
- TikTok与抖音有什么不同?为什么TikTok被称为“海外版抖音”?
- 考研数学之多元函数微积分