STM32 CubeMX学习:1. 点亮LED
系列文章目录
- 前期的准备
- 点亮 LED
- 闪烁 LED
- 定时器闪烁LED
- PWM控制LED亮度
- 常见的PWM设备
- 按键的外部中断
- ADC模数转换
- 串口收发
- 串口打印遥控器数据
- 未完待续…
文章目录
- STM32 CubeMX学习:1. 点亮LED
-
- 1.1基础学习:LED灯基础知识
- 1.2 程序学习
-
- 1.2.1 CubeMX 配置 GPIO 的基本操作
- 1.2.2 HAL_GPIO_WritePin函数的讲解
- 1.1.3 程序流程
- 总结
1.1基础学习:LED灯基础知识
1、LED即发光二极管,当LED内有电流通过时会发光,在安全电流范围内,电流越大,亮度越亮
1.2 程序学习
1.2.1 CubeMX 配置 GPIO 的基本操作
1、我这里使用正点原子的探索者开发板,在这块学习板上,与LED相连的引脚为PF9和PF10
所以我们需要在之后配置相应的引脚,这里我对LED灯的点亮原理作简要的说明啦
如上图所示我们可以看到,发光二极管的阴极与单片机引脚相连,发光二极管的阳极通过电阻与3.3伏的VCC相连。当单片机的引脚给高电平时,近似于发光二极管两端没有电势差,没有电流通过,因此发光二极管没有点亮,相反的如果单片机的引脚给低电平,发光二极管两端有电势差,有电流通过,发光二极管可以点亮。
2、下面我们可以在上一篇新建工程的基础上,在cubeMX中配置GPIO为输出模式,在cubeMX找到对应引脚,配置成GPIO_Output模式。
首先,搜索PF9和PF10(这里以PF9为例进行说明,PF10同理)
选择引脚模式为输出模式(Output)
3、在cubeMX中修改对应引脚的名字。
(1)在左侧找到System core->GPIO;
(2)找到对应的GPIO,例如PF9;
(3)在下方的配置单中user label填写命名,填好后会在芯片缩略图中更新。
如下图所示
4、生成代码:点击GENERATE CODE按键。
1.2.2 HAL_GPIO_WritePin函数的讲解
1、在HAL库中我们可以找到一个操作GPIO电平的函数:HAL_GPIO_WritePin函数
(1)该函数的作用在于使对应的引脚输出高电平或者低电平。
(2)该函数返回值为void,即没有返回值
(3)该函数有3个入口参数,可根据自己的需求进行设置
(a)GPIOx—— 对应GPIO总线,其中x可以是A…I。例如PF9,则输入GPIOF
(b)GPIO_Pin—— 对应引脚数。可以是0-15。例如PF9,则输入GPIO_PIN_9
(c)PinState—— GPIO_PIN_RESET:输出低电平;GPIO_PIN_SET:输出高电平
这里我们先尝试将两个LED同时点亮,
这里先给大家补充一些关于单片机的小知识:
对于单片机来说,LED灯等可以被称为是单片机的外设,对于外设的使用,大致可以按照以下几个步骤进行。
首先,HAL状态的初始化,可能包括flash指令缓存、flash数据缓存、flash预读取缓存、中断分组优先级、内部时钟HSI、MCU特定封装的初始化。
然后,进行系统时钟的初始化。
接着,对于GPIO初始化。
最后,操作相应的外设完成所需功能。
1.1.3 程序流程
程序经过HAL_Init初始化, GPIO初始化,进入主循环,在主循环中将2个LED引脚均输出低电平,从而点亮LED灯。主循环代码如下:
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
//set GPIO output low level
//设置GPIO 输出低电平
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
完整的main函数代码如下所示
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
//set GPIO output low level
//设置GPIO 输出低电平
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
然后在keil软件中编译代码并把代码下载到单片机中,
其中1为编译按钮,可以对整个keil工程进行编译
2为下载按钮,可以把代码下载到单片机之中,但是在下载之前,除了要安装相关的驱动(根据自己的情况分别配置),还需要进行一些设置
首先点击1处的“魔术棒”,然后点击2处进入debug设置,在3处选择自己的调试器,常见的调试器有ST-Link和J-Link等,大家可以自行查询一下这些调试器的区别,这里不做过多的介绍。在4处,我们可以看到一串地址,说明调试器已经成功连接到电脑。
然后点击1处的“Flash Download”,按照2处进行勾选,不过注意,其中“Reset and Run”代表一旦代码下载到单片机中立刻开始运行程序,这里要根据自己的需要灵活的进行设置。这样我们就完成关于下载的一些设置。
最后我们可以看到工程运行效果如图所示
可以看到“TFTLCD”下的两个LED灯已经被点亮,达到了我们预期的效果
代码我已经放到了我的GitHub仓库,如有需要可以下载使用:
CubeMX学习
总结
GPIO输出操作是STM32中最基础的操作啦,通过高低电平的控制完成类似开关的控制,而高电平则对应了计算机中的数字1,而低电平对应了计算机中的数字0,高低电平的不断变化,对应计算机内部的数字变化,STM32便是这样输出信号给外部世界的啦。 从此妈妈再也不用担心我的点灯啦,大家给自己点个赞,学习单片机还要再接再厉哦!