当前位置: 首页 > 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);	//清除串口接收数据寄存器非空中断标志位}}

实验结果

相关文章:

  • 腾讯音乐二面
  • VLLM在linux下部署
  • 2023CCPC东北四省赛题解
  • python正方形面积 2024年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
  • embedding的微调
  • 有动画效果,但动画窗格里为空
  • HJ33 整数与IP地址间的转换【牛客网】
  • 让电脑不再卡,从清理系统做起
  • Python Web开发基础
  • 【Linux笔记】——网络基础
  • 小林八股Java集合笔记(8k字概要版)
  • 【题解-洛谷】P11951 [科大国创杯初中组 2023] 数数
  • 数仓-概念模型、逻辑模型、物理模型介绍
  • 鸿蒙进阶——CMakelist、GN语法简介及三方库通用移植指南
  • VSCode C/C++ 开发环境完整配置及一些扩展用途(自用)update:2025/3/31
  • AllToAll通信为什么用于EP并行?
  • IDC机房交换机紧急更换的流程和注意事项
  • audio结构体 audio_track_cblk_t
  • 容器资源绑定和查看
  • 解决wsl没代理的问题
  • 十个最好的网站/seo搜索引擎优化实训总结
  • 学校校园网站建设方案/厦门seo排名优化方式
  • 尉氏县金星网架公司/北京seo多少钱
  • 合肥网站制作哪家强/网络推广员上班靠谱吗
  • 石景山广州网站建设/百度推广官网
  • 做网站公众号要多少钱/搜索引擎优化的方法有哪些