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

查看: 3173|回复: 2

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

[复制链接]

57

主题

317

回帖

7

蝴蝶豆

论坛元老

最后登录
2020-8-2
发表于 2017-5-15 12:12:17 | 显示全部楼层 |阅读模式
    之前我发的所有帖子都是基于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, 下载次数: 107)
<
回复

使用道具 举报

5

主题

521

回帖

9

蝴蝶豆

金牌会员

最后登录
2020-11-11
发表于 2017-5-15 16:53:10 | 显示全部楼层
不错写的很详细
回复 支持 反对

使用道具 举报

0

主题

4

回帖

0

蝴蝶豆

初级会员

最后登录
2019-12-6
发表于 2019-3-7 19:18:59 | 显示全部楼层
很好,写的很棒。现在这个bug已经修复了、
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版