stm32f103 5个串口寄存器版配置大全
2019-07-15 本文已影响0人
YuQiao0303
github 地址:https://github.com/YuQiao0303/stm32f103-uart1-5
串口 | TX | RX |
---|---|---|
1 | PA9 | PA10 |
2 | PA2 | PA3 |
3 | PB10 | PB11 |
4 | PC10 | PC11 |
5 | PC12 | PD2 |
测试结果截图:

以串口2的初始化为例(其余代码详见github):
//----------------------------------------------------------串口2-------------------------------------------------------------//
void uart2_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟 //RCC->APB2ENR 见中文参考手册 p70 port A - G的时钟使能 分别在第2-8位,USART1在14位
RCC->APB1ENR|=1<<17; //使能串口时钟 //RCC->APB1ENR 见中文参考手册 p72 USART2-5的时钟使能 分别在第17-20位
/*CRL & CRH
中文参考手册p113
每个io口4位,
低两位是mode:
00输入,01输出10MHz,10输出2MHz,11输出50MHz,
高两位是CNF:00模拟输入,01浮空输入 。10上拉下拉输入,11保留 ,
00:通用推挽输出模式
01:通用开漏输出模式
10:复用功能推挽输出模式
11:复用功能开漏输出模式
串口配置时,RX为1000,TX为1011
*/
GPIOA->CRL&=0XFFFF00FF;
GPIOA->CRL|=0X00008B00;//IO状态设置
/*ODR p115
似乎可以不用配置
端口输出数据(可用来配置上拉下拉)
串口配置时,RX为上拉输入,对应位配置为1
*/
GPIOA->ODR|=1<<3;
/*
p67
APB1RSTR 的 第17-20分别是串口2-5的复位
*/
RCC->APB1RSTR|=1<<17; //复位串口2
RCC->APB1RSTR&=~(1<<17);//停止复位
//波特率设置
USART2->BRR=mantissa; // 波特率设置
USART2->CR1|=0X200C; //1位停止,无校验位.
//使能接收中断
USART2->CR1|=1<<8; //PE中断使能
USART2->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(0,1,USART2_IRQn,2);//组2,最低优先级
}
各寄存器的用法可以在中文/英文参考手册中,搜索寄存器的名称,从而了解它如何配置