串口寄存器配置
来源:互联网 发布:精雕软件视频教程 编辑:程序博客网 时间:2024/06/10 08:29
串口操作相关库函数
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;//设置引脚速率为10MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//设置引脚模式为通用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOAGPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//选择要控制的GPIOA引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//设置引脚速率为10MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//设置引脚模式为浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOAUSART_InitTypeDef USART_InitStructure;//定义USART初始化类型结构体USART_InitStructure.USART_BaudRate = 115200;//波特率设为115200USART_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;//失能CTSUSART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能发送和接收USART_Init(USART1, &USART_InitStructure);//调用库函数,初始化USART1USART_Cmd(USART1, ENABLE); //使能USART1 USART_ITConfig(USART1,USART_TI_RXNE,ENABLE);//开启接收中断NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//配置中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置抢占优先级为0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//配置响应优先级为0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//NVIC使能NVIC_Init(&NVIC_InitStructure);//向寄存器写入参数}void USART1_IRQHandler((){u8 resif(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);}*/
阅读全文
0 0
- 串口寄存器配置
- STM32串口寄存器库函数配置方法
- s3c2440串口寄存器
- STM32串口寄存器操作
- STM32串口寄存器操作
- STM32F10x中的串口寄存器
- 串口相关设置寄存器
- 配置寄存器
- 配置寄存器
- 串口配置的寄存器被写成一个结构体的代码
- ARM7串口通信【中断寄存器】
- kinetis的UART串口寄存器
- 串口配置
- 驱动你的串口 和寄存器打交道
- MT6572 的UART串口寄存器DATASHEET
- stm32 USART 串口通信[操作寄存器+库函数]
- stm32 USART 串口通信[操作寄存器+库函数]
- stm32 USART 串口通信[操作寄存器+库函数]
- mysql 行转列
- Bigint 重载了'='和‘+’和‘-’和‘×’和‘<<’和‘>>’
- 线上操作与线上问题排查实战
- 《C++ Primer》第五版课后习题解答_第三章(3)(21-29)
- Akka(19): Stream:组合数据流,组合共用-Graph modular composition
- 串口寄存器配置
- Bootstrap模态框使用WebUploader点击失效问题解决
- ASP.NET 安全认证(一)
- 一个圆圈两个边框
- USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_prepro
- 反射获得getSystemService()的方法
- PHPUnit在Window下如何配置
- javaweb第一次
- Leetcode 由易入难 389. Find the Difference