news 2026/1/29 15:02:04

STM32-串口中断编程实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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);
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/28 2:01:50

基于VUE的企业协同管理系统 [VUE]-计算机毕业设计源码+LW文档

摘要:随着企业规模的扩大和业务的复杂化,企业内部的协同工作效率成为影响企业竞争力的关键因素。本文介绍了一种基于VUE框架开发的企业协同管理系统,详细阐述了系统的需求分析、技术选型、架构设计、功能模块实现等内容。该系统涵盖了系统用户…

作者头像 李华
网站建设 2026/1/29 12:19:25

如何快速使用bandcamp-dl:命令行音乐下载工具的完整教程

如何快速使用bandcamp-dl:命令行音乐下载工具的完整教程 【免费下载链接】bandcamp-dl Simple python script to download Bandcamp albums 项目地址: https://gitcode.com/gh_mirrors/ba/bandcamp-dl Bandcamp-dl是一款功能强大的开源工具,专门用…

作者头像 李华
网站建设 2026/1/28 23:18:55

【Excel VBA 编程】第61讲:两种方法驾驭文本处理猛兽

VBA正则表达式中引入贪婪匹配与惰性匹配两种模式,本质上是为编程者提供控制匹配“粒度” 的关键工具。因此,理解并正确运用这两种模式,能够有效解决文本处理中常见的边界模糊问题,快速实现精准数据提取和文本分析贪婪匹配上一期我…

作者头像 李华
网站建设 2026/1/22 14:55:21

探索金领冠珍护源初的纯净世界:2025年健康奶粉新篇章

凌晨三点,看着小床上翻来覆去揉肚子的宝宝,我盯着奶粉罐上的成分表第N次叹气——胀气、便秘、最近还总爱抓耳朵……当妈后才懂,选奶粉哪是“随便买一罐”的事儿?每一个细微的消化不适、每一次免疫力“掉线”,都像一根针…

作者头像 李华
网站建设 2026/1/27 1:07:53

Solon 不依赖 Java EE 是其最有价值的设计!

Java 后端开发领域,Solon 作为一个后起之秀的微服务应用开发框架,正以其轻量、快速、高度灵活的特性获得越来越多的关注。与 Spring/Spring Boot 等早期框架诞生于 Java EE(现 Jakarta EE)的生态背景不同,Solon 从一开…

作者头像 李华
网站建设 2026/1/25 5:49:32

MegSpot:专业级图片视频对比工具全方位使用指南

MegSpot:专业级图片视频对比工具全方位使用指南 【免费下载链接】MegSpot MegSpot是一款高效、专业、跨平台的图片&视频对比应用 项目地址: https://gitcode.com/gh_mirrors/me/MegSpot MegSpot是一款免费免登录、高效专业的跨平台图片视频对比应用&…

作者头像 李华