Cortexxx 发表于 2017-4-8 16:19:43

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

新建工程+串口程序


PG7->LPUART1_TX
PG8->LPUART1_RX
值得一提的是 这里使用的低功耗串口(是否低功耗我不知道,但这却是噩梦的开始,既然选择了用寄存器编程就要一直走下去...
一开始认为 LPUART和普通的串口差不多,然后就用按照“正常”的方法配置了 LPUART时钟使能-> 复用设置->IO设置-> LPUART设置
<font face="simsun">// UART.c</font>
然后在main里面随便发送点东西。
//main.c
LPUART1_Init(40,115200);
LPUART_Printf("HELLO WORLD!\n");
结果什么都没发过来。

然后我就用 逻辑分析仪测了一下这两个引脚(PG7&8) 没有电平的变化

然后我就弄了一个电平翻转的程序测试了一下 结果 电平还是没有变化

然后调试看了一下寄存器 很神奇我把整个PG的IO都置高 但是IDR只有后2位(PG0&1)为高;
所以可以排除 时钟的原因;

经过多方调查发现 PWR->CR2 的第9位控制 PG的供电
PG使用的是外部电源VDDIO2
解决了 IO的问题之后发现 串口发送出来的数据是乱码
乱码基本上跟时序有关 然后看了一下参考手册 Low-Power UART的这个BRR寄存器和UART的有些区别

上面规定了 一个范围
Fck 时钟必须在之间

然后在HAL里面看到这一段说明
发现LPUART算BRR的方法和UART的不一样
不仅仅是Fck/Bot这么简单BBR=Fck/((Bot&0xfffffff0)>>4))<<4;
这样一个串口的配置就基本完成了
然后弄了一个回环测试
在测试的时候发现了一个问题 把波特率设置为9600的时候出乱码
原因就是上面说过的
Fck 时钟必须在之间
Fck时钟为40M超过了其最大值 4096*9600=39M 所以才出的乱码
其实参考手册上也说了这一段话只有用32.768 kHz clock LSE 时钟才能把波特率调到9600

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





页: [1]
查看完整版本: 【NUCLEO-L496ZG评测】+新建工程寄存器版