二、STM32 跑马灯

目录

一、硬件设计

二、软件设计

三、新建HARDWARE文件夹

四、编写led.c和led.h

五、编写main.c函数


本实验使用的是正点原子探索者开发板

一、硬件设计

LED0为PF9,LED1为PF10。

二、软件设计

1、选择需要的源文件

在工程模版中,FWLIB分组下,我们引入了所有HAL库源文件对应的头文件

但是可以根据工程需要添加,可以减少工程编译时间,跑马灯实验需要的HAL库文件为:

cpp 复制代码
stm32f4xx_hal.c
stm32f4xx_hal_cortex.c
stm32f4xx_hal_gpio.c
stm32f4xx_hal_pwr.c
stm32f4xx_hal_pwr_ex.c
stm32f4xx_hal_rcc.c
stm32f4xx_hal_rcc_rx.c
stm32f4xx_hal_usart.c
stm32f4xx_hal_usart_ex.c
stm32f4xx_hal_dma.c
stm32f4xx_hal_dma_ex.c

在工程中去掉多余的源文件:

三、新建HARDWARE文件夹

在工程根目录下面新建一个HARDWARE的文件夹、用来储存以后与硬件相关的代码。然后在HARDWARE文件夹下新建一个LED文件夹,用来存放与LED相关的代码。

复制之前新建的Template工程模版,修改工程的名字

1、找到USER文件夹中找到 .uvprojx和.uvoptx,将名字修改为自己需要的名称。

2、打开工程管理(),修改工程名字。

3、点击魔术棒,Output->Name Executable修改为自己想要的名字。

4、编译工程,关闭软件,在USER文件夹中删除之前名字的文件。

四、编写led.c和led.h

新建led.c和led.h保存到HardWare->LED文件夹下。

注意要将led.c添加到工程中,在工程管理中,新建一个HARDWARE组,将led.c文件添加到其中。

将led.h的路径添加到头文件路径中。

led.c

cpp 复制代码
#include "led.h"
//初始化F9,F10为输出、并使能时钟
//LED IO 初始化
void LED_Init(void)
{
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_GPIOF_CLK_ENABLE();    //开启GPIOF 时钟
    
    GPIO_Initure.Pin = GPIO_PIN_9|GPIO_PIN_10; 
    GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP;    //推挽输出
    GPIO_Initure.Pull = GPIO_PULLUP;            //上拉
    GPIO_Initure.Speed = GPIO_SPEED_HIGH;       //高速
    HAL_GPIO_Init(GPIOF, &GPIO_Initure);
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);     //PF9置1, 默认初始化后灯灭
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);    //PF10置1,默认初始化后灯灭    
}

led.h

cpp 复制代码
#ifndef _LED_H
#define _LED_H

#include "sys.h"

#define LED0 PFout(9);      //DS0 PF9
#define LED1 PFout(10);     //DS1 PF10

void LED_Init(void);

#endif

五、编写main.c函数

cpp 复制代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"

/*下面主函数是使用HAL库函数实现控制IO口输出*/
int main(void)
{
    HAL_Init();     //初始化HAL库
    Stm32_Clock_Init(336, 8, 2, 7);     //设置时钟,168Hhz
    delay_init(168);        //初始化延时函数
    LED_Init();             //初始化LED
    
    while(1)
    {
        HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET); //LED0对应引脚PF9拉低,亮,等同于LED0(0)
        HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET); //LED1对应引脚PF10拉高,灭,等同于LED1(1)
        delay_ms(500); //延迟500ms
        HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET); //LED0对应引脚PF9拉高,灭,等同于LED0(1)
        HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET); //LED1对应引脚PF10拉低,亮,等同于LED1(0)
        delay_ms(500); //延迟500ms
    }
}

接下来即可编译程序。下载完程序之后,LED0和LED1循环闪烁

相关推荐
lucy1530275107929 分钟前
【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者
人工智能·科技·单片机·嵌入式硬件·算法·机器学习
scan113 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu0114 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
Mortal_hhh15 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
深圳市青牛科技实业有限公司15 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比16 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie16 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
鹿屿二向箔16 小时前
STM32外设之SPI的介绍
stm32
西瓜籽@17 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^1382879887219 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源