STM32G432基于CubeMX的LED模块化的配置
STM32G432基于CubeMX的LED模块化的配置
首先利用CubeMX生成LED的初始化代码,网上有很多配置教程很容易便能配置完成
通过CubeMX生成初始化代码后,自己再建立一个属于自己配置的初始化环境(需要有时钟的初始化)
CubeMX配置LED初始化过程
①点击File,选中New Project…在检索框中输入正确的型号,选中对应型号,选择完成后进行配置
②配置时钟及LED在原理图上对应的GPIOC8~15,锁存器对应GPIOD2为输出模式
③将PC8~15设置为高电平及推挽输出,PD2设置为低电平及推挽输出
④配置时钟树
⑤配置工程管理完成后点击generate code完成配置
建立led.c文件
将创建的.c文件加入到工程中
#include "led.h"
void LED_Init(void) //将CubeMX中的配置复制到此LED_Init()函数中
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
/*Configure GPIO pins : PC13 PC14 PC15 PC8
PC9 PC10 PC11 PC12 */
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pin : PD2 */
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
/*配置LED显示函数 */
void LED_Display(unsigned char ucled)
{
//将LED硬件对应的所有的灯熄灭
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); //置高电平打开锁存器
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); //置低电平关闭锁存器
//根据ucled的数值点亮相应的灯
HAL_GPIO_WritePin(GPIOC, ucled<<8, GPIO_PIN_RESET); //由于LED对应I0为PC8~PC15,因此需要左移8位控制对应IO
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
建立led.h文件
将.h文件所对应路径加入工程坏境中,否则会报错
#ifndef __LED_H
#define __LED_H
#include "main.h"
void LED_Init(void);
void LED_Display(unsigned char ucled);
#endif
直接加入进去即可实现
main.c编写主函数
#include "main.h"
#include "led.h"
void SystemClock_Config(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
LED_Init();
while (1)
{
/*LED1间隔500ms闪烁*/
LED_Display(0x01);
HAL_Delay(500);
LED_Display(0x00);
HAL_Delay(500);
}
}
代码实现LED流水灯效果
unsigned char i;
for(i=0;i<8;i++)
{
LED_Display(0x01<<i);
HAL_Delay(500);
}