公司最近在做一个STM32的项目,需要同时使用STM32的3个usart口和2个uart口。
一、知识准备
(1)芯片具体型号,我调试的是 STM32F103VET6
(2)芯片使用的晶振是多少兆,常用的有8MHz、12MHz、25MHz,我调试的是8MHz外部晶振
(3)端口对应管脚
二、基础代码编写
1、时钟设置
(1)初始化系统时钟,选择时钟源(内、外部时钟),设置各条总线的时钟源及频率
(2)打开对应外设时钟,usart1和其它几个串口不在同一条时钟总线上
(3)打开对应串口管脚所在总线时钟
2、串口GPIO口设置
3、串口基本参数设置(波特率、校验位、停止位等)
4、串口中断优先级设置(抢占优先级和子优先级)
5、编写串口中断服务函数
三、调试程序
写完一个串口,调试一个串口。不要全写完最后调试。在调试过程中usart1工作正常,其它串口输出乱码。
问题分析:
(1)波特率出现问题
1)波特率配置出现问题
2)时钟配置出现问题
反复检查时钟和波特率配置并没有问题,然后下班了。第二天到公司突然意识的TTL和232电平的区别。一般的USB转串口线出来的是232电平,后来我换用USB转TTL电平输出数据成功。
PS:
(1)232电平是-3— -15V代表逻辑“0”,3-15V代表逻辑“1”
(2)TTL电平是0-5V区间。