STM32串口学习小结
串口是一个单片机常用的外设模块,对于单片机的外部通讯,程序调试都有着十分重要的作用。所以作为嵌入式学习中一个必须掌握的外设模块,这里向大家分享的我学习小结。
1.通讯理论知识简要介绍
处理器与外部通讯主要可分别为以下两种方式:
1.并行通信:数据多位同时传输,通讯速度快,但占用IO口资源多
2.串行通信:数据单位顺序传输,通讯速度较慢,其占用IO口资源较少。
串行通信按数据传递方向又可分为一下几种类型:
1.单工:传输数据只能单向传递
2.半双工:传输数据可以进行双向传输,但在传输数据的一瞬间,数据为单向传输,实际上是一种可变方向的单工通信
3.全双工:传输数据进行双向传输过程,此类通信方式要求通信设备都具有独立的接收和发送数据能力。
串行通信按通信方式又可分为1.同步通信,2.异步通信
1.同步通信:从硬件结构上讲,其通讯接口有:1.SDA,2.SCL两个接口:
SCL:时钟线,提供数据接受时序,保证数据正常传递;2.SDA:数据线,发送和接受用户所需求的数据。
2.异步通信:与同步通信上对比,没有时钟线:SCL,使用波特率等协议来确保数据传输速率。通讯接口为:RXD、TXD分别负责数据的接收和发送。
以下是一些常用的通讯协议(图片来自正点原子):
2.基于库函数的串口初始化步骤:
对于串口的初始化步骤可以分为以下几步:
1.GPIO以及串口时钟的使能
2.GPIO端口复用映射设置,如果想要使用中断的化,则需要进行NVIC中断优先级分组设置
3.GPIO端口模式初始化
4.UART模式初始化设置
5.串口使能。
如果不使用串口中断的话,使用上面配置已经就够了。若使用串口中断则需要加上中断配置。
6.中断使能以及NVIC中断初始化配置
示例(初始化USART1):
void uart_init(u32 bound){
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能串口时钟
USART_DeInit(USART1);//复位串口1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//设置PA9与PA10复用功能串口1
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断管理优先级分组为2,2位抢占优先级,2位响应优先级
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10; //引脚设置位Pin9与pin10
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF; //模式设置为复用功能
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //推挽输出模式
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP; //上拉模式
GPIO_InitStructure.GPIO_Speed=GPIO_Fast_Speed; //IO速率50Mhz
GPIO_Init