STM32串口通信
2016-11-27 17:21
197 查看
1.常用的串口相关寄存器:
(1)USART_SR状态寄存器,对应的库函数
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
(2)USART_DR数据寄存器,对应的库函数
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
(3)USART_BRR波特率寄存器, 对应的库函数
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
注:波特率计算方法(来自官方参考手册):
2.串口配置的一版步骤:
(1)串口时钟使能:RCC_APBxPeriphClockCmd();
GPIO时钟使能:RCC_AHB1PeriphClockCmd();
(2)引脚复用映射:GPIO_PinAFConfig();
(3)GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF
(4)串口参数初始化:USART_Init();
(5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();USART_ITConfig();
(6)使能串口:USART_Cmd();
(7)编写中断处理函数:USARTx_IRQHandler();
(8)串口数据收发:void USART_SendData();//发送数据到串口到DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
(9)串口传输状态获取:FlagStatus USART_GetFlagStatus();
官方参考手册:
串口初始化函数:
(1)USART_SR状态寄存器,对应的库函数
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
(2)USART_DR数据寄存器,对应的库函数
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
(3)USART_BRR波特率寄存器, 对应的库函数
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
注:波特率计算方法(来自官方参考手册):
2.串口配置的一版步骤:
(1)串口时钟使能:RCC_APBxPeriphClockCmd();
GPIO时钟使能:RCC_AHB1PeriphClockCmd();
(2)引脚复用映射:GPIO_PinAFConfig();
(3)GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF
(4)串口参数初始化:USART_Init();
(5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();USART_ITConfig();
(6)使能串口:USART_Cmd();
(7)编写中断处理函数:USARTx_IRQHandler();
(8)串口数据收发:void USART_SendData();//发送数据到串口到DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
(9)串口传输状态获取:FlagStatus USART_GetFlagStatus();
官方参考手册:
串口初始化函数:
void Text_USART1_Int(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//GPIOA时钟使能; GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIOA复用功能; GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate=11520; USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; USART_InitStructure.USART_Parity=USART_Parity_No; USART_InitStructure.USART_StopBits=USART_StopBits_1; USART_InitStructure.USART_WordLength=USART_WordLength_8b; USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; USART_Init(USART1,&USART_InitStructure); USART_Cmd(USART1,ENABLE);//串口1使能; USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);/ 4000 /串口1中断使能; NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; NVIC_Init(&NVIC_InitStructure); } void USART1_IRQHandler(void) { u8 Rev; if(USART_GetITStatus(USART1,USART_IT_RXNE)) { Rev=USART_ReceiveData(USART1); USART_SendData(USART1,Rev); } }
相关文章推荐
- 嵌入式系统学习——STM32之串口通信UART
- STM32串口通信校验问题
- STM32之串口通信
- [置顶] ARM开发(5)基于STM32的UART串口通信实验
- STM32串口通信代码、ASCII码、XU4串口通信,printf只会转换为无符号类型,linux下的串口通信程序
- STM32串口实现485双机通信原理
- stm32-8串口通信
- STM32串口通信程序设计要点
- stm32与sim900之GPRS通信(电脑串口与SIM900通信)
- 两种方法实现stm32的8个串口通信
- STM32单片机的串口通信波特率应该这样计算~
- STM32串口通信程序设计要点
- STM32串口通信程序设计要点
- STM32:DMA实例之串口(USART)通信
- stm32串口通信
- [置顶] stm32+ucosII建立串口通信等多任务的实现
- STM32 串口驱动,分层通信
- STM32单片机学习(3) 串口中断通信
- STM32 基于串口RS485双机通信原理浅析
- STM32 用于Modbus ASCII通信,进一步串口通信参数7,E,1特别注意