STM32F407ZGT6学习之工程建立及点灯

       大学毕业工作了一段时间,想要重新复习一下STM32的驱动学习,写成博客记录下来,算是对学习的一种总结和记录。

工程代码:https://pan.baidu.com/s/1Qlfg1_br0tN6yy0fcDwCjg,密码:fhh2

(一). 使用的平台

使用的软件平台有两个,分别是IAR8.1和source insight4,下面给出两个软件的下载链接,仅供学习使用,其他用途请使用正版软件:

1. IAR8.1的编译下载平台,百度网盘下载链接:链接:https://pan.baidu.com/s/10_9VpOSaXK8ClsWqcTFSaQ,提取码: 6v2a 

IAR8.1的安装流程可以参考第三方的网址:https://www.sdbeta.com/wg/2018/0307/220301.html

2. source insight4的编译下载平台,百度网盘下载链接:https://pan.baidu.com/s/1ga36wRzy8ukMmoQfiR5yLw,密码:fcfd

 

source insight4的安装流程在下载的压缩包里有安装文档

(二). STM32工程的创建

1. 创建一个空工程

首先在IAR8.1的平台上创建一个工程,打开IAR8.1,菜单栏->Create New Project->Empty Project->点击OK,选择工程创建的地方进行保存,到此创建了一个空工程;

2. 添加文件夹

        创建了一个空的工程之后,先在工程里面创建文件夹,以便对之后加进来的文件进行归类存放。

        在工程“project - Debug”上右击,选择“Add”->“Add Group”创建新的文件夹,在创建的文件夹上,执行同样的操作,就可以创建二级文件夹。

      

根据个人习惯,创建好的文件夹如下:

stm32_driver存放STM32相关的文件和开发者编写的外设驱动文件,其中:

① CMSIS存放STM32相关的内核文件、寄存器定义文件、配置文件;

② StdPeriph存放STM32的库函数;

③ Driver存放开发者编写的外设驱动文件。

3. 添加文件

        首先需要添加STM32相关文件,相关文件压缩包“STM32F4xx_DSP_StdPeriph_Lib”需要到ST官网“https://www.st.com/content/st_com/en.html”下载。

        本工程使用ST公司提供的V1.8.0版本的库函数,百度链接:https://pan.baidu.com/s/1zyG8ZqEhoprVI5YkyiFvmA,密码:6pvf

        该压缩包包含STM32F407芯片相关的文件,压缩包具体介绍可以移步这位博主的文章学习:http://www.cnblogs.com/King-Gentleman/p/4369381.html

      在工程目录下创建“user文件夹”存放代码文件,在“user文件夹”中创建“library文件夹”,以此创建完文件夹如下:

① 根据上文提到的各文件夹的功能,存放不同类型的代码文件:

② 把STM32相关库文件存放到我们的工程目录下之后,就要在IAR的工程中把需要的文件都加进来,这里我么只需要添加.c文件和一个STM32的启动文件.s文件就行了。

4. 配置工程文件

       在工程“project - Debug”上右击,选择“Options”进入工程配置

①选择芯片型号,这里需要根据使用的芯片,选择相关的芯片型号,本工程使用的芯片型号是“STM32F407ZGT6”

 刚才我们在IAR平台上,工程里添加文件的时候没有添加的.h文件,需要在配置文件中添加使用的.h文件的路径,这样工程就能自动找到使用的.h文件了。图中第3方框就是添加的头文件的路径,这里我们添加的是头文件的相对路径,"$PROJ_DIR"代表工程的位置。第4方框是宏定义的,用于选择使用的芯片。

本工程的下载器使用的是“ST-LINK”,所以下载器选择"ST-LINK",至此,工程的初步配置完成。

5. 开发阶段

本工程此次点灯功能,在“Driver文件夹中”创建驱动点灯的.c和.h文件,在工程下创建一个main.c文件,并添加到工程中如下

在这里,我们需要先开时钟,每个外设都用一个时钟,在需要使用的时候才开启,这种可以减少不必要的功耗

工程里控制LED灯的引脚用到了两组GPIO的引脚,所以需要开启这两组GPIO的时钟

开启时钟之后,就是对GPIO进行配置,使其输出对应的电平驱动LED灯亮,至此,点灯成功。

### STM32F407ZGT6 单片机点亮 LED 的方法 对于 STM32F407ZGT6 来说,有两种常见的方式可以用来控制 LED 的亮灭:通过按键中断方式以及定时器方式。 #### 使用 HAL 库实现按键中断方式点亮 LED 灯 当按下按钮时触发外部中断,在中断服务函数中切换 GPIO 输出电平来控制 LED 的状态。这种方式适合用于即时响应用户的操作输入[^1]: ```c // 初始化GPIO和EXTI外设 void MX_GPIO_Init(void){ __HAL_RCC_GPIOD_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; // 配置PD2为上拉输入模式连接至用户键 GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOD,&GPIO_InitStruct); // 设置LED引脚为推挽输出模式 GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); // 使能并初始化NVIC中的对应线号 HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI2_IRQn); } // 用户按键回调处理函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin==GPIO_PIN_2){ static uint8_t state=0; state=!state; HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15,state?GPIO_PIN_SET:GPIO_PIN_RESET); } } ``` #### 定时器方式让 LED 每隔一秒闪烁一次 此方案利用硬件定时器产生周期性的溢出事件,在每次计满重载时改变 IO 口的状态从而达到延时的效果。这种方法适用于创建规律性的信号波形或者简单的视觉提示效果: ```c #include "main.h" TIM_HandleTypeDef htim2; int main(void) { /* Reset of all peripherals, Initializes the Flash interface and Systick. */ HAL_Init(); SystemClock_Config(); // 配置系统时钟 MX_GPIO_Init(); // 初始化GPIO端口配置 MX_TIM2_Init(&htim2);// 初始化 TIM2 外设结构体成员变量值 if(HAL_OK != HAL_TIM_Base_Start_IT(&htim2)){ Error_Handler(__FILE__, __LINE__); } while (1){} } /* TIM2 interrupt callback function */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM2){ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15); // 切换 PD15 上的 LED 状态 } } /** * @brief This function handles TIM2 global interrupt. */ void TIM2_IRQHandler(void) { /* USER CODE BEGIN TIM2_IRQn 0 */ /* USER CODE END TIM2_IRQn 0 */ HAL_TIM_IRQHandler(&htim2); /* USER CODE BEGIN TIM2_IRQn 1 */ /* USER CODE END TIM2_IRQn 1 */ } ``` 上述两种方法均能够有效地驱动 LED 工作,并且可以根据实际应用场景灵活选用合适的策略。值得注意的是,在编写具体的应用程序之前,应当先完成必要的硬件资源初始化工作,比如设置好相应的时钟树、开启目标外设的工作电源域等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值