串口寄存器配置
2017-08-25 09:53
218 查看
串口操作相关库函数
void USART_Init();//串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
FlagStatusUSART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatusUSART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
串口配置的一般步骤:
①串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
②串口复位:USART_DeInit();
这一步不是必须的
③GPIO端口模式设置:GPIO_Init();
模式设置为GPIO_Mode_AF_PP,复用推挽。
④串口参数初始化:USART_Init();
⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatusUSART_GetFlagStatus(USART_TypeDef*
USARTx,uint16_t USART_FLAG);
voidUSART_ClearITPendingBit(USART_TypeDef*USARTx,
uint16_t USART_IT);
void USART_Init();//串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
FlagStatusUSART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatusUSART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
typedef struct { uint32_t USART_BaudRate; /*设置波特率,对应寄存器USART_BRR */ uint16_t USART_WordLength; /*指定数据长度,对应寄存器USART_CR1的位12 */ uint16_t USART_StopBits; /*指定停止位的位数,对应寄存器USART_CR2的位13:12 */ uint16_t USART_Parity; /*指定校验方式,对应寄存器USART_CR1的位10:9 */ uint16_t USART_Mode; /*指定了USART的位数,对应寄存器USART_CR2的位13:12*/ uint16_t USART_HardwareFlowControl; /*使能或失能CTS硬件流控制,对应寄存器USART_CR3的位9 */ } USART_InitTypeDef;
串口配置的一般步骤:
①串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
②串口复位:USART_DeInit();
这一步不是必须的
③GPIO端口模式设置:GPIO_Init();
模式设置为GPIO_Mode_AF_PP,复用推挽。
④串口参数初始化:USART_Init();
⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatusUSART_GetFlagStatus(USART_TypeDef*
USARTx,uint16_t USART_FLAG);
voidUSART_ClearITPendingBit(USART_TypeDef*USARTx,
uint16_t USART_IT);
/* void My_USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO_InitTypeDef类型的结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//开启USART1时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //选择要控制的GPIOA引脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //设置引脚速率为10MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置引脚模式为通用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOA GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //选择要控制的GPIOA引脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //设置引脚速率为10MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设置引脚模式为浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOA USART_InitTypeDef USART_InitStructure; //定义USART初始化类型结构体 USART_InitStructure.USART_BaudRate = 115200; //波特率设为115200 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //1个起始位,8个数据位 USART_InitStructure.USART_StopBits = USART_StopBits_1; //1个停止位 USART_InitStructure.USART_Parity = USART_Parity_No ; //无奇偶校验 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//失能CTS USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能发送和接收 USART_Init(USART1, &USART_InitStructure); //调用库函数,初始化USART1 USART_Cmd(USART1, ENABLE); //使能USART1 USART_ITConfig(USART1,USART_TI_RXNE,ENABLE); //开启接收中断 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //配置中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置抢占优先级为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//配置响应优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //NVIC使能 NVIC_Init(&NVIC_InitStructure);//向寄存器写入参数 } void USART1_IRQHandler(() { u8 res if(USART_GetFlagStatus(USART1,USART_TI_RXNE)) { USART_ReceiveData(USART1); USART_SendData(USART1,res); } } int main() { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC的优先级为4种抢占优先级和4种响应优先级 My_USART1_Init(); while(1); } */
相关文章推荐
- 直接对寄存器操作,实现usart的串口输出寄存器的配置
- 串口配置的寄存器被写成一个结构体的代码
- STM8串口初始化寄存器配置
- ov7670的移植(寄存器的配置)——基于tq2440
- 6410开发板串口连接配置及裸机程序烧写步骤
- 树莓派3B 串口配置教程
- 深入理解LCD之寄存器配置
- FLYMCU串口下载配置界面
- Linux串口调试配置_GRUB串口通信_串口登陆
- 树莓派相关-树莓派串口配置方法(转)
- STM32的串口配置(中断方式)
- Ubuntu 配置串口信息
- 树莓派3配置串口,JAVA实现串口通讯(2016年3月版本,重点提示,3月之后的版本配置貌似不一样)
- SE955 激光扫描头设置 通过SSI串口进行设置,wince下SE955激光头,SE655红光头的配置
- SecureCRT串口配置+开发板啊调试出现问题
- avr单片机USART串口通讯初始化配置说明
- Linux下串口工具的安装与配置
- 配置寄存器命令
- MSP430学习笔记2-跑马灯程序,熟悉定时器寄存器的配置。
- linux串口配置及minicom的使用