stm32F407HAL库学习-点亮LED灯
前期准备:
- stm32F407ZGT6开发板
- stm32cubeIDE软件
- STM32F4xxHAL库
1、创建工程
我从这开始想学习使用stm32CubIDE工具来写代码。所以这算一个新的教程。
1、在双击stm32CubIDE工具进入到主界面中,点击左上角file->NEW->stm32_Prject.
然后计入到选择MCU的界面。
在这个中,有一个Part Number Search的一行,下面有个搜索的图标。在方框中输入型号。我这次使用的是stm32F407ZGT6.下面图片中不一样,是我截取网上的图片。
选中你的芯片型号只有,点击右下角的Next,然后进入到创建项目的界面,如下图。
在上面界面中 的Project Name这行输入名称,这个名称就是你项目的名称,这里我们输入LED_Project.完成后,点击下面的完成。
然后进入了硬件配置的界面。
这里比较重要详细讲一下,分为三大块。
1、MCU外设资源的选择。
提供了三种方法找到外设。可以直接搜索或者通过字母顺序的查找。还可以在大的分类里面找。
2、外设配置
选择好外设后,在这里构建好外设的功能。
3、预览界面
这里分为引脚预览和系统预览。
2、配置引脚
工程已经创建好了,下面开始配置GPIO引脚和一些必要的外设配置。
1、配置GPIO引脚用于LED
在 STM32CubeMX 界面中,点击左侧的 Pinout & Configuration 标签,进入芯片引脚配置视图。
在芯片引脚图上找到PF9、pF10,点击它。
在弹出的选项中,选择 GPIO_Output,表示将该引脚配置为通用输出模式。
左侧会显示 GPIO 选项,点击它。
在 GPIO 配置窗口中,找到 PF9、PF10,可以设置以下参数:
- GPIO mode: Output Push Pull(推挽输出)
- GPIO Pull-up/Pull-down: No pull-up and no pull-down(无上拉/下拉)
- Maximum output speed: Low(低速即可,LED 不需要高速)
- User Label: 输入 LED(可选,方便代码中识别)。
2、配置时钟
点击顶部的 Clock Configuration 选项卡。
如果你使用外部晶振(HSE,例如 8 MHz,常见于发现板),在 HSE 输入框中选择 Crystal/Ceramic Resonator。
默认情况下,STM32CubeMX 会自动配置 PLL(锁相环)以达到较高频率(例如 168 MHz,这是 STM32F407 的最大主频)。
在 System Clock 输入框中,确认频率(比如 168 MHz),或者根据需要调整。
点击 Resolve Clock Issues 按钮(如果有提示),让工具自动优化时钟树。
3、生成代码
配置完成后按下ctrl + S ,保存,就会生成初始化代码。
3、编写代码
在工程目录的 Core > Src > main.c 中打开 main.c。
在 main() 函数中,找到 while (1) 循环,这是主循环区域。
你会看到类似下面的代码框架:
1
2
3
4
5
6
7
8
9
10
11
12
13
14int main(void) {
/* 初始化代码已由 CubeMX 生成 */
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
while (1) {
/* USER CODE BEGIN 3 */
/* USER CODE END 3 */
}
}添加 LED 闪烁代码:
1
2
3
4/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); // 翻转 PD12 引脚状态
HAL_Delay(500); // 延时 500 毫秒
/* USER CODE END 3 */
4、编译并下载
- 编译代码:
- 点击 STM32CubeIDE 顶部工具栏的“锤子”图标(Build),或者按 Ctrl + B。
- 检查输出窗口,确保没有错误。
- 连接硬件:
- 将 STM32F407ZGT6 开发板通过调试器(比如 ST-Link)连接到电脑。
- 下载程序:
- 点击“绿色播放”按钮(Run),或者选择菜单 Run > Run。
- 程序会下载到芯片并自动运行。
复习一遍GPIO的八种模式
1、输入模式
1、输入浮空模式(Input Floating)
- 原理:GPIO引脚不接受任何内部的上拉和下拉电阻,处于悬浮状态。它的电平状态完全由外部信号决定。
- 用途:适用于外部电路已经提供了明确的高低电平信号。
- 注意:如果外部不接任何东西,电平会不稳定,容易受到干扰。
2、输入上拉模式(Input Pull-Up)
- 原理:GPIO引脚内部连接一个上拉电阻,连接3.3v电源。如果外部没有信号,则默认处于高点平。
- 用途:常用于检测低电平触发信号,比如按键按下时,引脚从高变为低。
- 注意:上拉电阻通常比较弱,外部信号足够强的话可以拉低电平。
3、输入下拉模式(Input Pull-Down)
- 原理:GPIO引脚在内部连接一个下拉电阻,连接着地。如果外部没有信号,则默认处于低电平。
- 用途:常用于检测一个高电平信号,当一个传感器输出高电平时触发。
- 注意:和上拉电阻一样,电阻很弱,当外部信号足够强时可以改变其电平
4、模拟输入模式(Analog Input)
- 原理:GPIO不在做数字信号处理,直接作为模拟信号输入,连接内部ADC。
- 用途:测量连续变化的电压值,比如温度传感器
- 注意:这种模式下,引脚不能用于输入输入输出,只能给模拟电路用。
2、输出模式
5、开漏输出模式(Open-Drain Output)
- 原理:GPIO引脚只能输出低电平,高电平处于开路状态,需要外部上拉电阻拉高。
- 用途:常用于IIC、SMBus等通信协议。
- 注意:必须外部连接上拉电阻,否则高电平无法实现。
6、推挽输出模式(Push-Pull Output)
- 原理:GPIO可以主动输出高电平和低电平,由内部电路直接驱动。
- 用途:最常用的输出模式
- 注意:驱动能力强,但是不能对各引脚直接并联输出。会短路。
7、复用功能模式(Alternate Function)
- 原理:GPIO引脚配置为硬件外设功能,比如USART的TX、RX等。
- 用途:用于特定的外设功能。例如串口通信
- 注意:配置时需要指定其具体的功能。
8、复用开漏、推挽模式(Alternate Function Open-Drain/Push-Pull)
- 原理:结合复用功能和开漏、推挽输出。例如IIC用开漏,PWM用推挽。
- 用途:根据外设需求选择输出类型,比如I2C需要开漏,PWM需要推挽。
- 注意:具体模式取决于外设协议要求。