3. Stm32f407 led代码简单分析
3. Stm32f407 led代码简单分析
硬件平台: stm32f407ve
软件平台: win10 (OS Name: Microsoft Windows 10 Enterprise
OS Version: 10.0.18363 N/A Build 18363)
Keil5 5.26.2
HAL库版本: 2.14.0(目前下载的最新的)
时间: 2020-02-09
实验介绍:
本次是使用hal库进行led闪烁实验。(根据之前建立的模板操作,这里不再建立工程模板)
//包含基本的头文件
#include <stm32f4xx.h>
//led端口的初始化,需要设置对应得IO引脚为输出模式,
//HAL_GPIO_Init();主要是根据这个函数来决定要做得工作
void led_init(void)
{
GPIO_InitTypeDef GPIO_Init; //定义一个结构体变量。
//1.时钟使能,在stm32的结构中,(片上)外部设备的使用第一步就是要设置时钟使能,复位之后,外部设备都是没有时钟的,降低了整个芯片的功耗,使能时钟,才表示外部设备可以正常工作了。
//片上外部设备主要指芯片上除了cpu的其他功能电路
__HAL_RCC_GPIOE_CLK_ENABLE(); //GPIOE这个端口的电路被开启,整个GPIOE的16个引脚都可以正常工作了。
//2.端口设置
GPIO_Init.Mode = GPIO_MODE_OUTPUT_OD; //输出开漏模式
GPIO_Init.Pin = GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; //需要配置的引脚
GPIO_Init.Pull = GPIO_PULLUP; //上拉电阻
GPIO_Init.Speed = GPIO_SPEED_FREQ_LOW; //IO引脚的工作频率,led的变化不会很快,使用低频率就足够了。
// GPIO_Init.Alternate = ; //GPIO的mode设置位复用功能的时候,才会配置复用功能
HAL_GPIO_Init(GPIOE, &GPIO_Init); //这个函数才是使之前配置的语句生效,之前是给结构体赋值
//3.点亮或熄灭灯
}
Main函数是c语言的入口函数
int main(void)
{
int i;
HAL_Init(); //必须在第一个语句执行,这个函数可以不执行,暂时不分析
led_init(); //上面提到的初始化IO端口为输出模式
while(1) //循环翻转引脚的状态
{
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_13);
for(i=0;i<1000000;i++)
;
// HAL_Delay(500);
}
}
也可以写成以下的样子,RESET表示输出低电平,SET表示输出高电平
这是一个SysTick定时器的中断处理函数,HAL_Init(); 这个函数初始化了systick,并且开启该定时器,使能了中断,所有需要使用这个处理一下。中断这个部分先可以放一放,后面将会说这个话题。
void SysTick_Handler(void)
{
HAL_IncTick(); //这个函数的源码只是将一个全局变量的值加1,这个中断是1ms发生一次,也就是说,没隔1ms全局变量就会被加1.根据这个全局变量的值,之后的HAL_Delay
函数会使用到这个全局变量。
}
github的工程源码:
https://github.com/zhaozhi0810/stm32f407_hal_keil5