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

嵌入式STM32学习——串口USART 2.2(串口中断接收)

实现串口接收

库函数实现串口接收

软件流程设计

初始化系统

  •         初始化GPIO、串口外设、LED时钟
  •         初始化串口和LED引脚

串口发送控制LED灯

usart.c

#include"stm32f10x.h"
#include"usart.h"
#include "stdio.h"void my_usart_init(void)
{GPIO_InitTypeDef GPIOInitstruct;USART_InitTypeDef Usart_initstruct;NVIC_InitTypeDef NVIC_Usart_Initstruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);//A9  TXGPIOInitstruct.GPIO_Pin = GPIO_Pin_9;GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIOInitstruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIOInitstruct);//A10  RXGPIOInitstruct.GPIO_Pin =GPIO_Pin_10;GPIOInitstruct.GPIO_Mode =GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIOInitstruct);//´®¿Ú1Usart_initstruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;		//ģʽ								Usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;		//Ó²¼þ¿ØÖÆÁ÷¹¦ÄÜ£¬Í¨¹ý¶îÍâµÄÐźÅÏߣ¨RTS/CTS£©À´Ð­µ÷Êý¾Ý´«Ê䣬·ÀÖ¹Êý¾ÝÒç³öUsart_initstruct.USART_BaudRate = 115200;						//²¨ÌØÂÊUsart_initstruct.USART_Parity = USART_Parity_No;		//УÑéλUsart_initstruct.USART_StopBits = USART_StopBits_1;  		//ֹͣλUsart_initstruct.USART_WordLength = USART_WordLength_8b;  		//Êý¾ÝλUSART_Init(USART1,&Usart_initstruct);USART_Cmd(USART1,ENABLE);																											//ʹÄÜ´®¿ÚÍâÉèNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //NVIC分组USART_ITConfig( USART1,  USART_IT_RXNE,  ENABLE); //中断线,检查串口接收缓冲区是否有数据NVIC_Usart_Initstruct.NVIC_IRQChannel = USART1_IRQn;NVIC_Usart_Initstruct.NVIC_IRQChannelPreemptionPriority = 0;NVIC_Usart_Initstruct.NVIC_IRQChannelSubPriority = 0;NVIC_Usart_Initstruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_Usart_Initstruct);
}void My_Usart_Send_Byte(USART_TypeDef* USARTx, uint16_t Data)
{USART_SendData(USARTx,  Data);while( USART_GetFlagStatus( USARTx,  USART_FLAG_TXE) == RESET);}void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string)
{uint16_t i=0;do{My_Usart_Send_Byte(USARTx,*(string+i));i++;}while(*(string+i) != '\0');while( USART_GetFlagStatus( USARTx,  USART_FLAG_TC) == RESET);
}int fputc(int ch, FILE * p)									//printfÖØ¶¨Òå
{USART_SendData(USART1,  (u8)ch);while( USART_GetFlagStatus( USART1,  USART_FLAG_TXE) == RESET);return ch;
}

main.c

#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "key.h"
#include "shake.h"
#include "usart.h"
#include "stdio.h"
void delay(uint16_t time) 
{uint16_t i=0;while(time--){i =12000;while(i--);}}int  main() 
{my_usart_init();
//	My_Usart_Send_Byte( USART1,  'A');
//	My_Usart_Send_Byte( USART1,  'B');
//	My_Usart_Send_Byte( USART1,  'C');
//	My_Usart_Send_Sting( USART1,  "\r\n");
//	My_Usart_Send_Sting(USART1 , "fei \r\n");printf("Hello,shi \r\n");while(1){}		
}void EXTI0_IRQHandler()  //中断函数
{if(EXTI_GetITStatus(EXTI_Line0) != RESET){GPIO_ResetBits(GPIOA,GPIO_Pin_1);EXTI_ClearITPendingBit(EXTI_Line0);			//Çå³ýÍⲿÖжϱê־룬ҪÓëEXTI_GetITStatus´îÅäʹÓÃ}
}void USART1_IRQHandler()
{char receive_data;if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)//获取中断标志位,检查接收接收数据寄存器非空{receive_data =  USART_ReceiveData(USART1);			//获取接收数据printf("receive data:  %c \r\n", receive_data);  //输出接收数据并输出USART_ClearITPendingBit(USART1,  USART_IT_RXNE);	//清除串口接收数据寄存器非空中断标志位}}

实验结果

http://www.xdnf.cn/news/585253.html

相关文章:

  • Python字符串格式化(二): f-string的进化
  • 企业级爬虫进阶开发指南
  • 【linux知识】sftp配置免密文件推送
  • 开搞:第四个微信小程序:图上县志
  • 获取印度股票市场API
  • 关于XILINX的XDC约束文件编写
  • HarmonyOS 鸿蒙应用开发基础:EventHub,优雅解决跨组件通信难题
  • 10.IIC和BH1750
  • 基于单片机的室内采光及可燃气体泄漏报警装置设计
  • SCons构建工具使用指南及示例
  • JAVA SE — 循环与分支和输入输出
  • 有没有开源的企业网盘,是否适合企业使用?
  • 记录:express router,可以让node.js后端文件里的路由分布的更清晰
  • vim以及vi编辑器常用快捷键指令
  • 服务器操作系统调优内核参数(方便查询)
  • 复杂项目中通过使用全局变量解决问题的思维方式
  • 2025中青杯数学建模B题思路+模型+代码
  • 【TTS回顾】CosyVoice 深度解析:基于LLM的TTS模型
  • iOS 直播弹幕功能的实现
  • 前端三件套之html详解
  • DevOps体系之Jmeter
  • java面试每日一背 day2
  • MySQL错误1419(HY000)解决方案:SUPER权限缺失与二进制日志启用冲突的3种处理方式
  • 内存管理子系统学习记录
  • uniapp实现H5、APP、微信小程序播放.m3u8监控视频
  • AVL树的实现
  • 【线段树】P2846 [USACO08NOV] Light Switching G|LG4|普及+
  • 无人机集装箱箱号识别系统准确率如何?能达到多少?
  • 微服务架构中的 RabbitMQ:异步通信与服务解耦(一)
  • Linux探秘:驾驭开源,解锁高性能——基础指令(续集)