news 2026/1/9 23:47:25

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 9:57:56

Locale Remulator 终极使用指南:轻松实现系统区域模拟

Locale Remulator 终极使用指南:轻松实现系统区域模拟 【免费下载链接】Locale_Remulator System Region and Language Simulator. 项目地址: https://gitcode.com/gh_mirrors/lo/Locale_Remulator Locale Remulator 是一款强大的系统区域和语言模拟工具&…

作者头像 李华
网站建设 2026/1/7 19:50:31

Git项目管理终极指南:实用.gitattributes配置完全手册

Git项目管理终极指南:实用.gitattributes配置完全手册 【免费下载链接】gitattributes 项目地址: https://gitcode.com/gh_mirrors/gita/gitattributes 你是否曾经遇到过这样的困扰?在Windows上编写的代码,在Linux上运行时出现奇怪的…

作者头像 李华
网站建设 2026/1/5 1:35:44

MITK医学影像处理实战指南:从零构建高效医疗应用

还在为医学影像处理的复杂性而头疼吗?想象一下:当你面对CT、MRI等多模态数据时,是否曾因为缺乏合适的工具而错失精准诊断的机会?今天,我们将带你深入探索MITK平台,这个专为医学影像处理而生的强大工具集&am…

作者头像 李华
网站建设 2026/1/4 16:12:36

如何3步集成专业歌词API?LrcApi一站式解决方案

如何3步集成专业歌词API?LrcApi一站式解决方案 【免费下载链接】LrcApi A Flask API For StreamMusic 项目地址: https://gitcode.com/gh_mirrors/lr/LrcApi 在音乐应用开发中,歌词同步功能常常成为技术瓶颈——搜索源单一、格式兼容性差、部署复…

作者头像 李华
网站建设 2026/1/6 21:34:33

独立开发,如何做自媒体

产品一期的App推广开始,就有很多朋友在问,怎么做内容吸引流量,再转化为产品用户。个人在社媒内容上,不擅长不专业,所以只能客观的表达过程。实话实说,以前只写技术博客,主要在开发者社区&#x…

作者头像 李华