STM32F4 5.STM32F4串口通讯
1.串口配置步骤
1.1 串口时钟使能(RCC_APBxPeriphClockCmd()),GPIO口使能(RCC_AHP1PeriphClockCmd())
1.2 引脚复用映射(GPIO_PinAFConfig())
1.3 GPIO口模式设置为复用,初始化GPIO口(GPIO_Mode_AF, GPIO_Init())
1.4 串口初始化(USART_Init())
1.5 开启串口中断并初始化NVIC(如要开启中断才需要此步骤)
NVIC_Init();
USART_ITConfig();
1.6 使能串口(USART_Cmd())
1.7 编写中断处理函数
USART_IRQHandler();
1.8 串口数据收发
串口数据接收(void USART_ReceiveData())
串口数据发送(uint16 USART_SendData())
1.9 串口传输状态获取
FlagStatus USART_GetFlagStatus()
void USART_ClearTPendingBit()
#include "stm32f4xx.h" #include "usart.h" #include "delay.h" void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStruct_A; USART_InitTypeDef USART_InitStruct_1; NVIC_InitTypeDef NVIC_InitStruct; //1.1 串口时钟使能,GPIO口使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//GPIO口使能,串口1对应的GPOIOA9和10,所以使能GPIOA //1.2 引脚复用映射 GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIO口复用 GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//GPIO口复用 //1.3 GPIO口模式设置为复用,初始化GPIO口 GPIO_InitStruct_A.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;//PA9 PA10 GPIO_InitStruct_A.GPIO_OType=GPIO_OType_PP;//推挽 GPIO_InitStruct_A.GPIO_Mode=GPIO_Mode_AF;//复用 GPIO_InitStruct_A.GPIO_PuPd=GPIO_PuPd_UP;//上拉 GPIO_InitStruct_A.GPIO_Speed=GPIO_Speed_100MHz;//频率100mhz GPIO_Init(GPIOA,&GPIO_InitStruct_A); //1.4串口初始化 USART_InitStruct_1.USART_BaudRate=115200;//波特率 USART_InitStruct_1.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制 USART_InitStruct_1.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//模式(发送和接收) USART_InitStruct_1.USART_Parity=USART_Parity_No;//奇偶校验 USART_InitStruct_1.USART_StopBits=USART_StopBits_1;//一个停止位 USART_InitStruct_1.USART_WordLength=USART_WordLength_8b;//8个字长 USART_Init(USART1,&USART_InitStruct_1);//初始化串口 USART_Cmd(USART1,ENABLE);//串口使能 //1.4 开启串口中断并初始化NVIC USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能串口中断 NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;//串口1对应通道 NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;//使能通道 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级1 NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;//响应优先级1 NVIC_Init(&NVIC_InitStruct);//初始化NVIC } //中断处理函数 void USART1_IRQHandler(void) { u8 u8Receive;//接收到的数据 if(USART_GetITStatus(USART1,USART_IT_RXNE))//判断是否是串口1 接收数据触发中断(USART_IT_RXNE) { u8Receive=USART_ReceiveData(USART1); USART_SendData(USART1,u8Receive);//发送接收到的函数 } } int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组 USART1_Init();//初始化串口 while(1); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp
· drools 规则引擎和 solon-flow 哪个好?solon-flow 简明教程