新建工程+串口程序 PG7->LPUART1_TX PG8->LPUART1_RX 值得一提的是 这里使用的低功耗串口 (是否低功耗我不知道,但这却是噩梦的开始,既然选择了用寄存器编程就要一直走下去... 一开始认为 LPUART和普通的串口差不多,然后就用按照“正常”的方法配置了 LPUART 时钟使能-> 复用设置-> IO设置-> LPUART设置
然后在main里面随便发送点东西。
结果什么都没发过来。 然后我就用 逻辑分析仪测了一下这两个引脚(PG7&8) 没有电平的变化 然后我就弄了一个电平翻转的程序测试了一下 结果 电平还是没有变化 然后调试看了一下寄存器 很神奇我把整个PG的IO都置高 但是IDR只有后2位(PG0&1)为高; 所以可以排除 时钟的原因; 经过多方调查发现 PWR->CR2 的第9位控制 PG[15..2]的供电 PG[15:2]使用的是外部电源VDDIO2 解决了 IO的问题之后发现 串口发送出来的数据是乱码 乱码基本上跟时序有关 然后看了一下参考手册 Low-Power UART的这个BRR寄存器和UART的有些区别 上面规定了 一个范围 Fck 时钟必须在[3*Bps,.4096*Bps]之间 然后在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 可能有些问题说的不对 见谅 |