STM32学习笔记 - 串口的初始设置
2017-12-27 19:54
405 查看
STM32学习笔记 - 串口的初始设置
1. 声明结构体变量GPIO_InitTypeDef GPIO_InitStructure;
-GPIO_InitTypeDef是一个结构体变量,包括GPIO_Pin(u16类型),GPIOSpeed(GPIOSpeed_TypeDef 类型)和GPIOMode(GPIOMode_TypeDef 类型),之后在设置引脚时会再用到。
2. RCC时钟设置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB1Periph_USART2,ENABLE);
-串口1模块时钟寄存器:RCC_APB2Periph_USART1;
-串口1端口(PA9/PA10)的时钟寄存器:RCC_APB2Periph_GPIOA;
-串口2的模块时钟寄存器:RCC_APB1Periph_USART2;
-串口2端口(PA2/PA3)的时钟寄存器:RCC_APB2Periph_GPIOA;
3. 设置引脚的IO功能模式和speed
/* 定义USART1-TX引脚 PA9 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //IO口第9脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //IO口复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 定义USART1-RX引脚 PA10 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //IO口第10脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //IO口悬空输入 GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 定义USART2-TX引脚 PA2 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //IO口第2脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//IO口复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 定义USART2-RX引脚 PA3 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //IO口第3脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //IO口悬空输入 GPIO_Init(GPIOA, &GPIO_InitStructure);
4. IO重映射
STM32的管脚功能可以重映射,将串口2的TX和RX端口从默认的PA2/PA3,重新定义到PD2/PD3上。
IO重映射的时钟寄存器:RCC_APB2Periph_AFIO;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
写入控制IO重定义功能的寄存器:
GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
5. 串口初始化设置
USART_InitStructure.USART_BaudRate = 115200;//波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//传输数据位数 USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位个数 USART_InitStructure.USART_Parity = USART_Parity_No;//校验位无 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//不用流量控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使用接收和发送功能
USART_Init(USART1, &USART_InitStructure); //把以上设置写入寄存器中(串口1) USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//接收中断 //USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//发送中断 USART_Cmd(USART1, ENABLE); //使能串口1
USART_Init(USART2, &USART_InitStructure); //把以上设置写入寄存器中(串口2) USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//接收中断 //USART_ITConfig(USART2, USART_IT_TXE, ENABLE);//发送中断 USART_Cmd(USART2, ENABLE); //使能串口2
6. 中断设置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//主优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//次优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中断使能 NVIC_Init(&NVIC_InitStructure);
相关文章推荐
- 通过串口实现stm32的IAP功能————stm32学习笔记
- stm32学习笔记---串口(原子开发板)
- STM32学习笔记3——怎样将整型变量转换为字符变量 然后串口 或者LCD发送出来(STM32) 以及sprintf的用法
- STM32学习笔记-ADC采集-串口2发送至上位机
- STM32-串口实验学习笔记
- STM32学习笔记:USART串口的…
- STM32学习笔记3——怎样将整型变量转换为字符变量 然后串口 或者LCD发送出来(STM32) 以及sprintf的用法
- STM32学习笔记-配置串口,printf重定向
- STM32学习笔记之-串口中断接收不定数据buff
- STM32与上位机串口通讯的学习笔记(简明的数据帧设计方法)
- Roll a Ball 游戏教程学习笔记(一)初始设置
- STM32学习笔记之硬件SPI读写与极性设置
- STM32学习笔记3-串口控制台
- STM32学习笔记-串口
- stm32学习笔记----双串口同时打开时的printf()问题
- STM32学习笔记——USART串口
- STM32学习笔记之简易Bootloader串口升级设计
- cortex_m3_stm32嵌入式学习笔记(三):串口实验(串口通信)
- STM32学习笔记8——串口输出数据丢失问题
- 学习STM32笔记1 NVIC设置