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

【NUCLEO-L496ZG评测】Low Layer(LL)库串口通信&GPIO操作

[复制链接]
donatello1996 提问时间:2017-5-15 12:12 /
    之前我发的所有帖子都是基于HAL库的,HAL库虽然简单易上手,但存在编译速度慢的明显缺点(我家里的I7台式机初始化编译一个HAL库工程要30秒,增量编译也要几秒,更不用说学校课室的I3台式机了,初始化编译需要29分钟)而这次我使用的是Low Layer Library,底层库,即LL库,大部分的外设库函数均采用inline(内联函数)形式执行,并且直接操作寄存器,省去一大堆assert和while语句的校验,代码执行效率大大提高。但是,LL库同样存在缺点,ST官方推出LL库的历史远远比不上推出HAL库的历史悠久,在用户体验和代码完善方面远远不及HAL库,导致很多操作还需要直接翻看寄存器手册,用户花在查手册的时间非常多,下面的串口通信例子就是这样。
    要学会一个库,首先要学会操作串口外设,这是最基础的一步。由于LL库也是CubeMX内部的控件,因此使用方法和HAL库一样,设置PG7和PG8为LPUART1复用。这里顺便设置板上三盏LED灯(PB7、PB14、PC7)为输出模式。
1.PNG
    时钟配置方面也一样,设置MSI、PLLCLK、80MHz。
2.PNG
    重点来了,打开Projects选项卡,找到Project Settings,设置三个外设的库函数均为LL库。这点千万不能忘了,HAL库和LL库唯一的区别就在这。
3.PNG
    配置好了工程,但是现在就可以直接使用串口了吗?不可能!
    没错,我又发现了问题。串口初始化完毕后,必须添加串口使能语句,否则串口无法正常工作,讲道理这点在CubeMX的HAL库的初始化工程中并没有问题啊,为什么CubeMX生成LL库工程就会出问题呢?这个问题只有ST官方才知道。而这点,足以打脸@moyanming2013在之前的帖子中针对我的那个问题如果CubeMX生成的工程是完全没有问题的话,为什么会犯如此低级的错误呢?我如果是没有用过CubeMX,又怎么会发现这个问题呢?我们既然是CubeMX的使用者,就必须赞扬CubeMX的优点,正视CubeMX的缺点,而不是夸大CubeMX的优点,洗白CubeMX的缺点。
8.PNG
如图,左图为我自己修改过的工程,右图为原汁原味的CubeMX生成的工程,我没有经过任何改动
6.PNG 7.PNG
    然后,为了要使用printf()函数,必须重定义fputc()函数。重定义fputc()函数有一个好处就是,可以自由选择printf()函数使用哪个串口作为输出,如图所示,使用LPUART1串口。
9.PNG
    在主函数中添加GPIO电平反转函数,用法与HAL库一样。

1.gif 4.PNG
    上传工程文件。 工程文件.zip (8.93 MB, 下载次数: 123)
收藏 1 评论2 发布时间:2017-5-15 12:12

举报

2个回答
时光虫子 回答时间:2017-5-15 16:53:10
不错写的很详细
燕雀de理想 回答时间:2019-3-7 19:18:59
很好,写的很棒。现在这个bug已经修复了、

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版