STM32以中断的方式点亮LED小灯(标准库)

2023-05-16

STM32以中断的方式点亮LED小灯(标准库)


文章目录

  • STM32以中断的方式点亮LED小灯(标准库)
    • 一.认识中断
      • 1.中断优先级:
      • 2.中断嵌套:
      • 3.中断执行流程
      • 4.中断与stm32
      • 5.中断与NVIC(嵌套向量中断控制器)
      • 6.EXTI(Extern Interrupt)外部中断
        • ①.EXTI简介
        • ②.EXTI基本结构
      • 7.AFIO复用IO口
    • 二.创建MDK(keil5)项目
      • 1.项目结构
      • 2.基本设置
    • 三.具体实现
      • 1.配置RCC,把涉及到的外设的时钟全部打开
      • 2.配置GPIO,选择端口为输入模式(GPIOB14号引脚)
      • 3.配置AFIO,选择我们用的GPIO连接到后面EXTI
      • 4.配置EXTI,选择触发方式(例如上升沿,下降沿或双边沿),触发响应方式(中断或者事件触发)
      • 5.配置NVIC,给外设配置合适的优先级,最后通过NVIC中断信号进入CPU
      • 6.中断函数的写入
      • 7.LED.h头文件引入
      • 8.main.c主函数
    • 四.电路的连接
    • 五.实验现象
    • 六.总结


  • 主要任务:
    STM32F103核心板GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接电平时,LED灭灯

实验工具:
(1)软件

  • STM32CubeMX
  • KEIL5:安装教程
  • mcuisp(或者FlyMcu): mcuisp百度网盘链接提取码:h2xc

(2)硬件

  • STM32F103C8T6的最小核心板
  • 杜邦线(模拟开关)
  • USB转TTL模块

一.认识中断

中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行

1.中断优先级:

当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源

2.中断嵌套:

当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

3.中断执行流程

在这里插入图片描述

4.中断与stm32

在这里插入图片描述
在这里插入图片描述

1.68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设
2. 使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级响应优先级

5.中断与NVIC(嵌套向量中断控制器)

在这里插入图片描述

  • NVIC:
    NVIC作为CPU的小助手,在NVIC里对接入的中断进行优先级排序,告诉CPU应该优先处理哪一个中断,然后CPU才会立刻暂停正在做的事务转而处理中断(判断分配优先级这样的事如果交给CPU来做的话没有必要,都是一些重复且简单的事项,所以专门设计了一个NVIC来处理对应的事项)

优先级分组:

  • NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级
  • 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队
    在这里插入图片描述

6.EXTI(Extern Interrupt)外部中断

①.EXTI简介

在这里插入图片描述

②.EXTI基本结构

在这里插入图片描述

7.AFIO复用IO口

正如上面的图中所说,AFIO作为一个数组选择器外设,用来给GPIO外设选择中断的引脚。

①.如果只有一个中断,则GPIO引脚可以随意选择,若选择GPIOA Pin15,则AFIO则选择数字15输出到EXTI 。
②.如果有多个中断,则GPIO引脚则要注意不能同时选择相同标号引脚,例如两个中断,一个设为GPIOA15触发,一个设为GPIOB15触发,因为AFIO是数字选择器,这样就只能识别到一个15。
在这里插入图片描述


二.创建MDK(keil5)项目

1.项目结构

在这里插入图片描述

LED.c用来存储驱动程序的主体代码
LED.h用来存放这个驱动程序可以对外提供的函数或变量声明
其他都是F103C8T6对应标准库所需的文件,直接添加就好

2.基本设置

在这里插入图片描述
在这里插入图片描述


三.具体实现

1.配置RCC,把涉及到的外设的时钟全部打开

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  //打开GPIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   //打开AFIO时钟
	//EXTI 和 NVIC已经默认开启时钟,不需要再开启

2.配置GPIO,选择端口为输入模式(GPIOB14号引脚)

	GPIO_InitTypeDef GPIO_InitStruct;//定义配置初始化结构体
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;     //对于外部中断来说,要选择浮	空,上拉或者下拉输入其中一个模式,如果不清楚看ST参考手册GPIO外设配置表(113页EXTI输入线)
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;//我们
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_Init(GPIOB, &GPIO_InitStruct);
  • 这里注意,GPIO的输入模式有所不同

1.如果想要接高电平亮,接低电平熄灭的话就需要浮空输入模式
2.如果想要接高电平或者低电平亮,不接就熄灭的话就选上拉或者下拉,最后再根据中断的

3.配置AFIO,选择我们用的GPIO连接到后面EXTI

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//用AFIO配置需要的中断引脚选择

4.配置EXTI,选择触发方式(例如上升沿,下降沿或双边沿),触发响应方式(中断或者事件触发)

	EXTI_InitTypeDef EXTI_InitStruct;
	EXTI_InitStruct.EXTI_Line = EXTI_Line14;//选择PB14对应的14号线路;
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;//开启中断
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//选择是中断还是事件触发
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//配置为下降沿触发
	EXTI_Init(&EXTI_InitStruct);

5.配置NVIC,给外设配置合适的优先级,最后通过NVIC中断信号进入CPU

	NVIC_InitTypeDef NVIC_InitStruct;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//先配置一下指定中断分组(这里选择抢占优先级和响应优先级)
	NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;//这里参数需要到整个文件搜索,不同类型的芯片终端通道列表不一样,选择MD的芯片找到10-15EXTI的通道
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	//指定优先级,因为只有一个中断源,优先级随意设置
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;  //指定抢占优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; //指定响应优先级
	NVIC_Init(&NVIC_InitStruct);

6.中断函数的写入

这里中断函数的函数名称需要在库里面去寻找,因为我们之前用的PB14对应的EXTI的14号口,所以这里找到库里的void EXTI15_10_IRQHandler(void)函数,因为有10-15EXTI都能进来所以一般还要在函数里要进行判断EXTI14的中断标志位是不是为1

  • 完整代码
//第六步写中断函数(在启动文件startup里面找,找对应之前开启的10-15通道)
void EXTI15_10_IRQHandler(void)//必须无参无返回值
{
	//因为有10-15EXTI都能进来所以一般首先要进行判断EXTI14的中断标志位是不是为1
	if(EXTI_GetITStatus(EXTI_Line14)== SET)
	{
			//这里是用PA5引脚点亮小灯泡
			GPIO_InitTypeDef GPIO_InitStructure;	
			RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开GOIO时钟
			GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
			GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
			GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
			GPIO_Init(GPIOA,&GPIO_InitStructure);
		
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==Bit_RESET)//判断现在是低电平还是高电平,对应开关等
		{
			
			
			GPIO_SetBits(GPIOA,GPIO_Pin_5);
			//GPIO_ResetBits(GPIOA,GPIO_Pin_5);
		}
	    else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==Bit_SET)
		{
		
			//GPIO_SetBits(GPIOA,GPIO_Pin_5);
			GPIO_ResetBits(GPIOA,GPIO_Pin_5);
		}
		
		
		//每次执行中断后都应该清除中断标志位,不然会一直申请中断,程序就卡死在中断里面
	EXTI_ClearITPendingBit(EXTI_Line14);
	}
	
}





以上都是LED.c文件对应的代码,下面给出LED.c文件的完整代码

#include "stm32f10x.h"                  // Device header


uint16_t LED_Count;//计数器(中断触发次数)
void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;//定义配置初始化结构体
	EXTI_InitTypeDef EXTI_InitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;
	
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  //打开GPIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   //打开AFIO时钟
	//EXTI 和 NVIC已经默认开启时钟,不需要再开启
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;     //对于外部中断来说,要选择浮空,上拉或者下拉输入其中一个模式,如果不清楚看ST参考手册GPIO外设配置表(113页EXTI输入线)
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	//第三步,给AFIO配置,库函数文件在GPIO一个文件里
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//用AFIO配置需要的中断引脚选择
	
	//第四步配置EXTI,选择触发的方式
	EXTI_InitStruct.EXTI_Line = EXTI_Line14;//选择PB14对应的14号线路;
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;//开启中断
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//选择是中断还是事件触发
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//配置为下降沿触发
	EXTI_Init(&EXTI_InitStruct);
	
	//第五步,配置NVIC(NVIC属于内核,库函数需要在杂项即misc.h里寻找)
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//先配置一下指定中断分组(这里选择抢占优先级和响应优先级)
	NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;//这里参数需要到整个文件搜索,不同类型的芯片终端通道列表不一样,选择MD的芯片找到10-15EXTI的通道
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	//指定优先级,因为只有一个中断源,优先级随意设置
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;  //指定抢占优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; //指定响应优先级
	NVIC_Init(&NVIC_InitStruct);
	
}



//第六步写中断函数(在启动文件startup里面找,找对应之前开启的10-15通道)
void EXTI15_10_IRQHandler(void)//必须无参无返回值
{
	//因为有10-15EXTI都能进来所以一般首先要进行判断EXTI14的中断标志位是不是为1
	if(EXTI_GetITStatus(EXTI_Line14)== SET)
	{
			
			GPIO_InitTypeDef GPIO_InitStructure;	
			RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
			GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
			GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
			GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
			GPIO_Init(GPIOA,&GPIO_InitStructure);
		
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==Bit_RESET)//判断现在是低电平还是高电平,对应开关等
		{
			
			
			GPIO_SetBits(GPIOA,GPIO_Pin_5);
			//GPIO_ResetBits(GPIOA,GPIO_Pin_5);
		}
	    else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==Bit_SET)
		{
		
			//GPIO_SetBits(GPIOA,GPIO_Pin_5);
			GPIO_ResetBits(GPIOA,GPIO_Pin_5);
		}
		
		
		//每次执行中断后都应该清除中断标志位,不然会一直申请中断,程序就卡死在中断里面
	EXTI_ClearITPendingBit(EXTI_Line14);
	}
	
}

7.LED.h头文件引入

#ifndef _LED_H
#define _LED_H
void LED_Init(void);
#endif

8.main.c主函数

#include "stm32f10x.h"                  // Device header
#include "LED.h"
int main(void)
{
	LED_Init();
	while(1)
	{
		
	}
} 


四.电路的连接

在这里插入图片描述
这里因为不涉及到串口通信,所以PA9和PA10不用向我这样连上
然后编译生成HEX文件,烧录到程序中


五.实验现象

请添加图片描述

可以看到,当PB14接3.3v或5v的高电平的时候由PA5决定的灯泡亮,当接地的时候灯泡熄灭
当PB14什么都不接的时候,灯泡会不稳定的闪亮,因为我们之前在PB14初始化GPIO的时候选择的浮空输入模式,既不上拉也不下拉,处在一个没有默认值的情况,所以灯泡随即闪亮,这里参考一篇文章


六.总结

这次实验花了我比较长的时间,前几次实验都用的HAL库做,其实很多时候不知道自己在配置些什么东西,都是跟着别人的文章做,别人做什么就跟着做什么。当我花时间去认真了解了标准库后,对稍微底层一些的东西以及对stm32本身的外设以及硬件知识多了一些了解,虽然不及寄存器开发底层,但是也足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32以中断的方式点亮LED小灯(标准库) 的相关文章

  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 137-基于stm32单片机智能保温杯控制装置Proteus仿真+源程序

    资料编号 137 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DS18B20传感器 电机 制作一个基于stm32单片机智能保温杯控制装置Proteus仿真 2 通过DS18b20传感器检测当前保温杯水的温度 并且
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • 我可以检测 Android 设备上是否存在“LED 通知”吗?

    背景 我有一个带有通知的应用程序 我想支持 LED 通知 并且它运行良好 在我的偏好中 我允许用户自定义 LED 通知 问题 如果设备不支持 LED 自定义选项 我不想显示这些选项 因为这可能会让用户感到困惑 如果您拥有的只是廉价的 And
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加

随机推荐

  • Linux多进程间通信——消息传递实现

    Linux多进程间通信 消息队列实现 之前已经分享了共享内存 管道 套接字来实现多进程的通信 xff0c 下面再介绍一下消息队列 xff0c 后面我还会再介绍最后一个多进程的通信方式 xff0c 通过信号来实现 xff0c 这样多进程通信的
  • RS485总线究竟能挂接多少个设备?

    N年前做门禁系统上位机软件开发的时候突击培训过串口通信编程基础 后来在我的脑海里一直认为RS485总线能且只能挂接256个设备 xff08 因为地址是1byte xff0c 取值范围也就0 255 xff09 后来经过几个项目的了解 xff
  • Python Raw Socket使用示例(发送TCP SYN数据包)

    python view plain copy import sys import time import socket import struct import random def SendPacketData Buffer 61 Non
  • mysql-server 依赖 mysql-server-5.5 解决方案

    问题 ubuntu14 04 3安装mysql时报错 xff1a sudo apt get install mysql server mysql client 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 有
  • 生成aruco码方法

    有两种方法得到想要的aruco码 xff1a 1 直接通过网址得到 http chev me arucogen xff08 不过只有四个格式 xff09 网页截图为 xff1a 2 通过运行C 43 43 代码得到 利用C 43 43 生成
  • 超详细c语言简化tcp通信接口(多线程实现一个服务端处理多个客户端服务)

    超详细c语言tcp通信接口 1 可下载源码 xff08 客户端 服务端通信 xff09 2 说明3 接口代码4 客户端通信main client demo c5 服务端通信main server demo c 1 可下载源码 xff08 客
  • 怎么在视频上叠加字幕和Logo--技术实现1

    这篇文章我给大家讲解的这种字幕叠加和Logo叠加方法是在渲染视频的时候 画 上去的 xff0c 其实是通过某种API将OSD和Logo绘制到显卡缓存 xff0c 然后提交缓存到屏幕 我们知道渲染视频有几种常用的API xff1a GDI x
  • opencv源码编译及配置完整版教程(win10+vs2019+opencv-4.4.0+opencv_contrib-4.4.0)

    opencv源码编译及配置完整版教程 xff08 win10 43 vs2019 43 opencv 4 4 0 43 opencv contrib 4 4 0 xff09 一 下载vs2019 官网下载 xff1a https visua
  • c++使用多个库的头文件内容里有名字相同问题

    首先说下结构体 xff0c 如果两个头文件定义的结构体内容不一样 xff0c 但名字一样 xff0c 当一个文件同时包含着两个头文件的时候 xff0c 就会报如下错误 xff1a 此时 xff0c 在不修改头文件的情况下 最好不要改动 xf
  • 蓝牙模块 HC08_两个STM32开发板无线通信

    一 HC08重要参数 蓝牙4 0 xff0c BLE xff0c 主从一体 xff1b 模块上电后 xff0c 启动需要150ms xff1b UART波特率 xff1a 9600默认 xff1b 空中速率 xff1a 1Mbps 与HC0
  • STM32 --- 使用内部FLASH存储数据

    本文记录了对一些知识点的理解 操作方法 xff0c 如有错误 xff0c 请务必批评指正 xff01 xff01 最终的测试截图 xff1a 目录 一 内部FLASH要点 关于地址 xff1a 关于解锁 xff1a 关于擦除 xff1a 关
  • Keil 代码自动格式化对齐整理 AStyle设置图解

    代码对齐 xff0c 使用前后效果 xff1a 建议 设置成快捷键 xff1a CTRL 43 S xff0c 即可保存 43 对齐 一 下载插件 https sourceforge net projects astyle files as
  • keil5 烧录程序到单片机的方法

    Keil是一种常用的单片机开发工具 xff0c 支持多种单片机芯片 下面详细说明Keil5如何烧录程序到单片机的方法 编译程序 首先 xff0c 在Keil5中打开编写好的程序工程 xff0c 进行编译 编译生成的可执行文件是 hex或 b
  • 基于STM32 + SYN6288语音播报

    完整代码下载 https download csdn net download zhouml msn 85592868 一 接线示例 xff1a 二 模块重点 xff1a 1 xff1a 5V供电 xff0c 功耗约120mA 带图中小喇叭
  • STM32开发---ADC单通道电压采集

    代码zip下载 xff1a https download csdn net download zhouml msn 86666457 spm 61 1001 2014 3001 5501 STM32 ADC单通道电压数据采集 xff0c 直
  • Keil仿真调试Debug不能放断点_图解

    前提 xff1a 正常连接了调试器 43 开发板 xff0c 才能进入Debug模式 xff01 xff01 xff01 一 正常情况 当Keil进入Debug模式 xff0c 正常可以放置断点时的界面 xff0c 是下面这样的 xff1a
  • 无人机(2)_电机

    型号值 如2212 前两位 电机外径 后两位 转子高度KV值 电机空转 时 电压每提高1V 电机转速提高 800转 分钟无刷电机 电机分有刷和无刷 无人机都是无刷 电机 贵 力气大 耐用 电池节数 很重要 一节是4 2V电调大小 A越大越好
  • Linux下运用opencv的简单图像编程

    文章目录 Linux下运用opencv的简单图像编程一 编写一个打开图片进行特效显示的代码 一 用普通方式编译程序1 准备工作 xff1a 2 准备一张图片 xff0c 移到相同目录下3 编译程序4 运行程序 二 用make 43 make
  • 简单stm32程序编写以及调试

    简单stm32程序编写以及调试 一 环境配置 1 MDK的安装 MDK xff08 Microcontroller Development Kit xff09 是针对ARM处理器 xff0c 特别是Cortex M内核处理器的最佳开发工具
  • STM32以中断的方式点亮LED小灯(标准库)

    STM32以中断的方式点亮LED小灯 xff08 标准库 xff09 文章目录 STM32以中断的方式点亮LED小灯 xff08 标准库 xff09 一 认识中断1 中断优先级 xff1a 2 中断嵌套 xff1a 3 中断执行流程4 中断