当前位置: 首页 > news >正文

4-STM32F103的串口中断与空闲中断接收数据

STM32F103的串口中断与空闲中断接收数据

1.引脚配置

void Uart_Init(u32 bound)
{//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟//USART1_TX   GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9//USART1_RX	  GPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  //Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;		//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式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); 		//初始化串口1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启串口空闲中断USART_Cmd(USART1, ENABLE);                    //使能串口1 
}

2.中断处理

void USART1_IRQHandler(void)                	//串口1中断服务程序
{if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)  //接收中断{	USART_ClearITPendingBit(USART1, USART_IT_RXNE);uart1_rx_buf[uart1_rx_len]=USART_ReceiveData(USART1);	//读取接收到的数据uart1_rx_len++;} // 空闲中断的时候说明串口没数据了,收集完成else if(USART_GetITStatus(USART1, USART_IT_IDLE) == SET){USART1->SR;USART1->DR;//清除中那标志位uart1_rx_done=1;}else{}
} 

3.串口发送

u8 Usart1_Send(u8 * data,u16 len)
{u16 i=0;if(len<1)return 0;for(i=0;i<len;i++){USART_SendData(USART1,data[i]);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}return 1;
}

4.串口解析

void Usart1_Data_Analyse()
{if(uart1_rx_done==1){Usart1_Send(uart1_rx_buf,uart1_rx_len);uart1_rx_len=0;uart1_rx_done=0;}}

相关文章:

  • 装配基本操作与标准配合关系-装配体设计技能(1)
  • 【案例拆解】米客方德 SD NAND 在车联网中(有方模块)的应用:破解传统 TF 卡振动脱落与寿命短板
  • 地标“金”字招牌再升级:赤水金钗石斛携手世酒中菜开启新纪元
  • AI Agent开发与安全
  • 【网络安全】ios逆向一般整理
  • Python 中设置布尔值参数为 True 来启用验证
  • 全球首款5G-A人形机器人亮相,通信与AI融合进入新阶段
  • ACR窃密木马改头换面,更名重构后规避能力升级
  • RPGMZ游戏引擎 如何手动控制文字显示速度
  • 8年java开发从零学习人工智能(深度学习)--pp飞桨(百度自研开源框架)
  • 领码 SPARK 融合平台赋能工程建设行业物资管理革新——数智赋能,重塑中国模式新范式
  • leetcode-3443. K次修改后的最大曼哈顿距离
  • Vue 滑动验证组件
  • OPENGLPG第九版学习 - 纹理与帧缓存 part1
  • conda导出环境文件requirements.txt
  • Python OpenCV 模板匹配的一些应用场景和方法思考,浅析KAZE特征匹配对比
  • Odoo 18进阶开发:打造专业级list,kanban视图Dashboard
  • Cmake入门及CMakeLists.txt 语法介绍
  • 数据库从零开始:MySQL 中的 DDL 库操作详解【Linux版】
  • 服务网格安全(Istio)从入门到实践
  • 荔湾网站制作/公司网络营销推广方案
  • 免费行情网站app大全下载/哪里有免费的网站推广
  • 县级政府网站建设论文/手机管家一键优化
  • 拉萨北京网站建设/什么都能搜的浏览器
  • 中国通信建设协会网站/天天广告联盟
  • 潍坊网站维护/深圳品牌seo