STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断

STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断

本篇文章将讲解如何使用STM32CUBEMX新建一个工程,并点亮LED灯。 需要的软硬件有: STM32开发板;jlink或stlink下载器;KEIL5;STM32CUBEMX。

文章目录

  • STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断
  • 前言
  • 一、使用CUBEMX新建工程
    • 1.选择芯片
    • 2.选择烧录(debug)方式
    • 3.设置时钟
    • 4.配置外设:设置LED引脚
    • 5. 最后工作
  • 二、代码讲解
  • 三、LED闪烁代码
    • 1. 引脚操作的几个函数
    • 2. LED闪烁的代码
  • 四. 代码烧录
    • 1. 配置下载器为jlink
    • 2. 编译和烧录
    • 3. KEIL优化——代码自动提示
  • 五. 福利——定时器中断
    • 1. 选择定时器配置时钟,设置预分频和计数值。这里设置后,计数完成后是1s
    • 2. 打开更新中断,并配置中断号
    • 3. 代码介绍
    • 4. 写一个LED闪烁的代码
    • 5. 在mian中添加定时器中断开始函数
    • 6. 总结


前言

  • ST公司推荐使用HAL库编程,最新的STM32F7、H7系列仅有HAL库,无官方出的库函数版本。
  • HAL库的意义在于,通过在硬件层和应用层之间添加一层,称为HAL层,让STM32不同系列的芯片变得更加统一。在以前,STM32F1系列和F4系列,寄存器不统一、库函数也有一些区别,导致开发了F1的芯片,想转移到其他芯片的时候就很麻烦,因此使用了同一个HAL库编程。步进如此,还可以使用STM32CUBEMX程序初始化时钟和外设,方便了开发。
  • 同样地,HAL库也有一些缺点,因为增加了一层,导致指令更多,从而运行速度有所降低。在一些对时速严格要求地地方,可以使用寄存器进行编程。
  • 本篇文章将讲解如何使用STM32CUBEMX新建一个工程,并点亮LED灯。需要的软硬件有:
    STM32开发板;jlink或stlink下载器;KEIL5;STM32CUBEMX。

一、使用CUBEMX新建工程

1.选择芯片

芯片的选择依照所使用的STM32开发板或和核心板。本篇使用的是最简单的STM32F103C8T6核心板,引脚全部引出。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第1张图片

2.选择烧录(debug)方式

在这里我们选择常用的Serial Wire的Debug方式。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第2张图片

3.设置时钟

首先设置高速和低速时钟的时钟源,由于所使用的开发板上包含了外部的高速8MHz晶振和低速32KHz晶振,因此这里选择外部时钟。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第3张图片
然后在Clock Configuration中设置时钟的时钟的线路和倍频分配,有外部晶振按照图中所示设置即可。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第4张图片

4.配置外设:设置LED引脚

查看开发板上LED的引脚为PC13,设置PC13为输出模式(GPIO_OUTPUT),并起标签为LED,方便后续代码编写。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第5张图片
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第6张图片

5. 最后工作

最后就是输出前的工作了,设置工程名、开发IDE选择MDK,即使用KEIL5开发。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第7张图片
其次勾选“只生成需要文件”和“单独生成.c文件”,减少工程大小和编译时间,并方便开发。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第8张图片

二、代码讲解

点击右上方的生成代码后,打开工程,得到如下图所示的工程目录。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第9张图片
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第10张图片
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第11张图片

三、LED闪烁代码

1. 引脚操作的几个函数

HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, 0);			// 写引脚为低电平
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, 1);			// 写引脚为高电平
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);				// 反转该引脚
uint8_t res = HAL_GPIO_ReadPin(LED_GPIO_Port, LED_Pin);	// 读取该引脚是高电平还是低电平
HAL_Delay(1000);			// 延时函数,单位ms
  • 引脚的操作无非就是写引脚,和读引脚。对于STM32中,引脚分为PORT和PIN。PORT是指GPIOA、GPIOB等引脚集;PIN为引脚号,为0-15中的某一个。
  • LED_GPIO_Port和LED_Pin其实就是表示GPIOC-13,因为我们设置了LED的标签,所以可以用这个

2. LED闪烁的代码

在while函数中编写两行代码,实现LED的闪烁
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第12张图片

HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);				// 反转该引脚
HAL_Delay(1000);			// 延时函数,单位ms

四. 代码烧录

1. 配置下载器为jlink

在下载前,配置KEIL5的烧录方式为JLINK SW模式,并勾选“下载完成后自动reset并运行”。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第13张图片
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第14张图片
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第15张图片

2. 编译和烧录

成功后会有LED闪烁

3. KEIL优化——代码自动提示

为方便函数编写,这里打开KEIL中的代码自动补全功能,如下图。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第16张图片
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第17张图片

五. 福利——定时器中断

定时器作为单片机中的外设,具有重要意义。它可以让一些代码以固定的频率运行,例如每隔1s读取某传感器的数值,每100ms刷新一次屏幕等。只需要配置好定时器周期和中断,并将代码放置在中断函数中即可。

1. 选择定时器配置时钟,设置预分频和计数值。这里设置后,计数完成后是1s

定时器的周期计算:72MHz / 预分频数 / 计数值。设置预分频和计数值为7200-1和10000-1,即可得到更新周期为1s的定时器。
预分频和计数值需要减1的原因是,计数从0开始;另外由于预分频和计数值的位数为16位,最大值只能为65535。
预分频的作用:由于定时器的时钟频率为72MHz,即1s可以计数72M次,过高,使用预分频可以降低计数频率。这里设置预分频7200-1,则计数频率为10KHz,即1s钟会计数10 000次。
计数值的作用:计数值为设置定时器的计数上限,达到上限后更新计数值,重新计数。这里10 000-1,正好计数到1s后重新计数,则定时器的更新周期为1s。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第18张图片

2. 打开更新中断,并配置中断号

上面说定时器每个1s会更新,打开更新中断,就可以得到周期为1s的中断。
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第19张图片
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第20张图片

3. 代码介绍

STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第21张图片
STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第22张图片

4. 写一个LED闪烁的代码

STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第23张图片

HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);

注意把前面main函数的LED闪烁代码注释掉!

5. 在mian中添加定时器中断开始函数

STM32 HAL库编程(1)——使用STM32CUBEMX新建工程、LED闪烁测试、定时器中断_第24张图片

HAL_TIM_Base_Start_IT(&htim1);			// 启动定时器中断
//	HAL_TIM_Base_Stop_IT(&htim1);			// 关闭定时器中断

烧录之后观察代码LED的情况,一亮一灭的时间为2s,这是由于每隔1s让LED变化一次。

6. 总结

只要配置好的定时器TIM,就全部配置好了,只需要在合适的位置写代码,就可以以一定周期运行该部分的代码。
但注意在mian函数中要打开中断,对于其他中断也一样。加上一行函数就可以

你可能感兴趣的:(笔记)