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

查看: 875|回复: 0

[STM32L496] 【NUCLEO-L496ZG评测】+新建工程寄存器版

[复制链接]

8

主题

164

回帖

97

蝴蝶豆

金牌会员

最后登录
2020-12-2
发表于 2017-4-8 16:19:43 | 显示全部楼层 |阅读模式
新建工程+串口程序

图片1.png
PG7->LPUART1_TX
PG8->LPUART1_RX
值得一提的是 这里使用的低功耗串口  (是否低功耗我不知道,但这却是噩梦的开始,既然选择了用寄存器编程就要一直走下去...
一开始认为 LPUART和普通的串口差不多,然后就用按照“正常”的方法配置了 LPUART  时钟使能-> 复用设置->  IO设置-> LPUART设置
  1. <font face="simsun">// UART.c</font>
复制代码

然后在main里面随便发送点东西
  1. //main.c
  2. LPUART1_Init(40,115200);
  3. LPUART_Printf("HELLO WORLD!\n");
复制代码

结果什么都没发过来。
QQ图片20170408140347.png
然后我就用 逻辑分析仪测了一下这两个引脚(PG7&8) 没有电平的变化

然后我就弄了一个电平翻转的程序测试了一下 结果 电平还是没有变化
QQ截图20170408141744.jpg
然后调试看了一下寄存器 很神奇我把整个PG的IO都置高 但是IDR只有后2位(PG0&1)为高;
所以可以排除 时钟的原因;
QQ截图20170408143027.jpg
经过多方调查发现 PWR->CR2 的第9位控制 PG[15..2]的供电
PG[15:2]使用的是外部电源VDDIO2
解决了 IO的问题之后发现 串口发送出来的数据是乱码
乱码基本上跟时序有关 然后看了一下参考手册 Low-Power UART的这个BRR寄存器和UART的有些区别
QQ截图20170408150235.jpg
上面规定了 一个范围
Fck 时钟必须在[3*Bps,.4096*Bps]之间
QQ截图20170408150008.jpg
然后在HAL里面看到这一段说明
发现LPUART算BRR的方法和UART的不一样
不仅仅是Fck/Bot这么简单  BBR=Fck/((Bot&0xfffffff0)>>4))<<4;
这样一个串口的配置就基本完成了
然后弄了一个回环测试
在测试的时候发现了一个问题 把波特率设置为9600的时候出乱码
原因就是上面说过的
Fck 时钟必须在[3*Bps,.4096*Bps]之间
Fck时钟为40M超过了其最大值 4096*9600=39M 所以才出的乱码
其实参考手册上也说了这一段话  只有用32.768 kHz clock LSE 时钟才能把波特率调到9600

PS 可能有些问题说的不对 见谅


LPUART.zip (232.52 KB, 下载次数: 4)
回复

使用道具 举报

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