STMF1 HAL库 —— ⑤ 按键控制LED灯

一、材料准备
准备以下材料
在这里插入图片描述
工程配置设置
2.1、选择MCU
点击Start My project from McU
在这里插入图片描述

在搜索框中搜索STM32F103VE,然后在右下方选择后缀是Tx的(因为教程中使用的是STM32F103VET6的这款芯片,因此要选择相对应的)在这里插入图片描述
选择完成之后,点击右上方的Start Project
在这里插入图片描述
2.2、引脚分配&外设配置
在 Pinout & Configuration 的 System Core 中,点击 RCC,把 HSE 、LSE设置为 Crystal/Ceramic Resonator(晶体或陶瓷谐振器)
在这里插入图片描述
设置成功后,相应的管脚(OSC_IN & OSC_OUT)会被自动配置;
在这里插入图片描述
在 System Core 中,点击 SYS,设置 Debug 模式为 JTAG(4 pins)(不设置的话,程序将可能下载但不能仿真调试)
在这里插入图片描述
接着通过查看原理图获知,LED14所对应的引脚为PE0PE3
(在此,我们简要讲解一下LED灯的基础知识,LED即发光二极管,当LED内有电流通过时会发光,在安全电流范围内,电流越大,亮度越亮,如下图所示我们可以看到,发光二极管的阴极与单片机引脚相连,发光二极管的阳极通过电阻与3.3伏的VCC相连。当单片机的引脚给高电平时,近似于发光二极管两端没有电势差,没有电流通过,因此发光二极管没有点亮,相反的如果单片机的引脚给低电平,发光二极管两端有电势差,有电流通过,发光二极管可以点亮。)
在这里插入图片描述

然后在软件右边MCU处,寻找PE0~PE3引脚,并逐个点击将其设置成GPIO_Output(输出模式)
在这里插入图片描述
然后在GPIO处,依次点击PE0~PE3引脚,在下方User Label处修改引脚的用户标签(相当于取另一个新名字)
在这里插入图片描述
GPIO output level:选择引脚初始化电平(高、低)
GPIO mode:选择模式
GPIO Pull-up/Pull-down:选择上下拉、既不上拉也不下拉
Maximum output speed:选择输出速度
User Label:修改引脚标签
我们逐个将其设置成下图所示的配置
在这里插入图片描述
接着通过查看原理图获知,按键14所对应的引脚为PE9PE12
在这里插入图片描述
然后在软件右边MCU处,寻找PE9~PE12引脚,并逐个点击将其设置成GPIO_Input(输入模式)
在这里插入图片描述
然后在GPIO处,依次点击PE9~PE12引脚,在下方User Label处修改引脚的用户标签(相当于取另一个新名字)
在这里插入图片描述
GPIO mode:选择模式
GPIO Pull-up/Pull-down:选择上下拉、既不上拉也不下拉
User Label:修改引脚标签
我们逐个将其设置成下图所示的配置
在这里插入图片描述
2.3、时钟树配置
STM32F1的最高主频可达到72M,最后使HCLK = 72Mhz即可:
在这里插入图片描述
 配置时,将会自动检测错误;若频率配置错误,将会红色高亮报错。
在这里插入图片描述
2.4、工程生成配置
如图所示,填写工程名字以及路径,同时IDE选择MDK-ARM
在这里插入图片描述
2.5、代码生成配置
如图所示,勾选相对应的框
在这里插入图片描述
2.6、生成代码
配置完成之后,点击右上角的蓝色按钮
在这里插入图片描述
生成完成之后,点击Open Project打开工程
在这里插入图片描述
三、运行代码
3.1、设备连接
如图所示,进行设备接线
在这里插入图片描述
3.2、修改代码
我们新建key.h文件,添加以下代码(新建.h文件路径保存在KeycontrolLED\Core\Inc下)
在这里插入图片描述
接着新建key.c文件,添加以下代码(新建.c文件路径保存在KeycontrolLED\Core\Src下)
在这里插入图片描述
接着点击小方格,进行.c文化添加
在这里插入图片描述
点击Add,进行添加
在这里插入图片描述
选择刚刚保存的key.c文件,并点击Add‘在这里插入图片描述
’添加成功,点击OK
在这里插入图片描述
接着点击魔法棒进行.h文件添加
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击Inc文件夹,并点击确定
在这里插入图片描述
接着打开main.c文件,添加以下代码
在这里插入图片描述
在这里插入图片描述
3.3、编译代码
点击左上角编译按钮
在这里插入图片描述
下方出现" 0 Error(s), 0 Warning(s).语句,即代表编译无误
在这里插入图片描述
3.4、下载代码
点击魔法棒
在这里插入图片描述
如图所示,进行选择
在这里插入图片描述
点击settings
在这里插入图片描述
如图所示,选择SW,并点击确定
在这里插入图片描述
点击左上角下载按钮,等待下载
在这里插入图片描述
出现Verify OK.语句,即代表下载成功
在这里插入图片描述
3.5、效果展示
下载完成之后,我们进行实验,当我们按下按键1的时候,LED1就会亮起,再次按下按键1的时候LED1就会熄灭,其余三个按键亦是同样效果

QQ群:

796415884

欢迎大家进群交流!

### STM32F10 HAL 中 ADC 单通道 DMA 输出 对于 STM32F10 系列微控制器,在使用硬件抽象层 (HAL) 配置 ADC 进行单通道 DMA 数据传输时,主要涉及初始化结构体 `ADC_HandleTypeDef` 和 DMA 结构体 `DMA_HandleTypeDef` 的设置。为了实现这一功能,需确保正确配置 ADC 模块以及关联的 DMA 请求。 #### 初始化 ADC 并启用 DMA 功能 在启动 ADC 转换之前,必须先完成如下操作: - 配置 GPIO 引脚作为模拟输入 - 设置 ADC 参数,包括分辨率、数据对齐方式等 - 启用并配置用于传输转换结果的 DMA 通道 以下是具体代码示例[^1]: ```c // 定义全局变量来保存 ADC 句柄和 DMA 句柄 ADC_HandleTypeDef hadc1; DMA_HandleTypeDef hdma_adc1; void MX_ADC1_Init(void) { // ...省略其他无关配置... /** Configure Regular Channel */ adc_ChannelConfTypeDef sConfig = {0}; sConfig.Channel = ADC_CHANNEL_0; /* 使用通道0 */ sConfig.Rank = ADC_REGULAR_RANK_1; /* 排序等级为第一个位置 */ sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES;/* 采样时间为28周期 */ if (HAL_OK != HAL_ADC_ConfigChannel(&hadc1, &sConfig)) { Error_Handler(); } // 开启中断模式下的 DMA 流量控制 __HAL_LINKDMA(&hadc1,DMA_Handle,&hdma_adc1); } static void MX_DMA_Init(void) { // ...省略其他无关配置... hdma_adc1.Instance = DMA1_Channel1; hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_adc1.Init.Mode = DMA_CIRCULAR; /* 循环模式 */ hdma_adc1.Init.Priority = DMA_PRIORITY_HIGH; if(HAL_OK != HAL_DMA_Init(&hdma_adc1)) { Error_Handler(); } } ``` 上述代码展示了如何通过 HAL 函数配置 ADC 和 DMA 来支持连续采集来自单一通道的数据,并将其存储到内存缓冲区中。特别注意的是,这里选择了循环模式 (`DMA_CIRCULAR`),这意味着当达到最后一个目标地址后,DMA 控制器会自动返回起始地址继续写入新数据,非常适合实时监测应用场景。 此外,还需要调用 `HAL_ADC_Start_DMA()` 方法指定要接收 ADC 值的目标数组及其大小,从而触发实际的数据传输过程[^1]。 ```c uint16_t aADCxConvertedValues[BUFFER_SIZE]; if (HAL_OK != HAL_ADC_Start_DMA(&hadc1, (uint32_t*)aADCxConvertedValues, BUFFER_SIZE)) { Error_Handler(); } ``` 此部分实现了将 ADC 获取的结果经由 DMA 自动传送到预先定义好的缓存空间内,无需 CPU 主动干预即可高效处理大量样本点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值