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

STM32-串口中断编程实验

通过单片机上的串口将单片机与电脑连接在一起,通过电脑上的串口调试助手向单片机内发送数据,改变板载LED的闪烁频率

#include "stm32f10x.h"
#include "delay.h"

uint32_t blinkInterval = 1000;//闪灯间隔,变量,1000只是初值

void APP_OnBoard_LED(void);
void APP_USART1_Init(void);

int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

APP_OnBoard_LED();
APP_USART1_Init();

while(1)
{
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);//亮
Delay(blinkInterval);//延迟
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);//灭
Delay(blinkInterval);//延迟
}
}

//编写中断响应函数
void USART1_IRQHandler(void){
if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)== SET){//确保中断是由RXNE标志位触发的
uint8_t dataRCVD = USART_ReceiveData(USART1);
if(dataRCVD == '0'){
blinkInterval = 1000;
}
else if(dataRCVD == '1'){
blinkInterval = 200;
}
else if(dataRCVD == '2'){
blinkInterval = 50;
}
}
}

//初始化串口
void APP_USART1_Init(void){

//#1.引脚初始化

GPIO_InitTypeDef GPIO_InitStruct;

//Tx引脚 PA9 AF_PP
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_Init(GPIOA, &GPIO_InitStruct);

//Rx引脚 PA10 IPU
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOA, &GPIO_InitStruct);

//#2.串口初始化

USART_InitTypeDef USART_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;

USART_Init(USART1, &USART_InitStruct);

//闭合总开关
USART_Cmd(USART1, ENABLE);

//#3.配置中断
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

//#4.配置NVIC

NVIC_InitTypeDef NVIC_InitStruct;

NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;//中断的名称,见顶部头文件stm32f10x.h
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;//子优先级
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//闭合中断开关

NVIC_Init(&NVIC_InitStruct);

}

//初始化LED引脚 PC13 通用开漏
void APP_OnBoard_LED(void){

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_Init(GPIOC, &GPIO_InitStruct);
}

http://www.jsqmd.com/news/106035/

相关文章:

  • WAN2.2-14B-Rapid-AllInOne:AI视频生成的终极一体化解决方案
  • 机器人AI开发终极指南:5步快速部署开源VLA模型
  • PS4存档管理终极指南:Apollo Save Tool完全手册
  • 5步搞定家庭AI集群:让闲置设备变身强力算力引擎 [特殊字符]
  • 【每日算法】LeetCode 84. 柱状图中最大的矩形
  • macOS iSCSI启动器终极指南:从入门到精通完整教程
  • 代码重构艺术:让你的代码从“能跑”到“好跑”
  • Qwen3-Omni-30B-A3B-Instruct多模态AI模型完整使用指南
  • 【每日算法】 LeetCode 394. 字符串解码
  • 现代前端工程化实战:从 Vite 到 Vue Router 的构建之旅
  • 孤勇者歌词拼音打印版PDF
  • OpenBoard智能键盘:跨平台安装与功能配置完整指南
  • Boc-PEG-NHS,BOC-聚乙二醇-活性脂与其他类似产品的对比
  • Coqui TTS深度技术解析:从语音合成原理到工程实践
  • Docker容器化部署AI应用:从零到生产的完整实战指南
  • Linux挂载外部硬盘
  • 50首传唱度极高的儿歌
  • 数据恢复神器TestDisk:如何用3个关键步骤找回你丢失的所有文件?
  • 终极指南:Windows系统快速部署PostgreSQL pgvector扩展完整教程
  • AVL-CRUISE纯电动汽车动力性经济性仿真实战指南:从入门到精通
  • 3个VS Code语法检查技巧,让技术文档质量提升200%
  • 2025垃圾分类数据集实战指南:从标注到训练的全流程优化
  • Analog Diffusion模型深度解析:从技术原理到专业级胶片质感生成
  • 教师考评新方式:线上系统让评分变得更简单
  • Psi4量子化学计算:从零开始的完整实战指南
  • Cy3荧光修饰艾塞那肽-4,Exendin-4
  • unrpa终极指南:快速解压RPA文件的完整解决方案
  • Three.js数字展馆架构设计与实现指南
  • AI推理服务无缝升级:从架构设计到生产实践的全链路方案
  • 10分钟掌握FunASR:流式语音识别从入门到部署的完整实战指南