STM32跑马灯实验的基本步骤(库函数)

1.硬件设计

本次用到的硬件只有 LED(DS0 和 DS1)。其电路在 ALIENTEK 探索者 STM32F4 开发板 上默认是已经连接好了的。DS0 接 PF9,DS1 接 PF10。所以在硬件上不需要动任何东西。其连 接原理图如图
在这里插入图片描述

2.软件设计

1.

首先,找到TEST 工程(在光盘:4,程序源码\1,标准例程-寄存器版本 \实验 0 新建工程实验) ,在该工程文件夹下面新建一个 HARDWARE 的文件夹,用来存储以后 与硬件相关的代码。然后在 HARDWARE 文件夹下新建一个 LED 文件夹,用来存放与 LED 相 关的代码。
在这里插入图片描述

2.

然后我们打开 USER 文件夹下的 test.uvproj 工程,新建一个C文件,然后保存在
HARDWARE→LED 文件夹下面,保存为 led.c。在该文件中输入如下代码:

#include "led.h" 
//初始化 PF9 和 PF10 为输出口.并使能这两个口的时钟 
//LED IO 初始化 
void LED_Init(void) 
{        
	RCC->AHB1ENR|=1<<5;//使能 PORTF 时钟   		 
	GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP, 
	GPIO_SPEED_100M,GPIO_PUPD_PU); //PF9,PF10 设置  
	LED0=1;//LED0 关闭  LED1=1;//LED1 关闭 
} 

然后再在LED文件夹中加一个led.h(这是规范,规矩就是规矩,自定义文件中.c与.h并存)
接着把.c文件和.h文件加入工程中
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.

时钟使能:

(在rcc文件中此处有5个使能函数,我们选第一个AHB1)
在这里插入图片描述

选AHB1中的参数时定位到AHB1函数中去,然后在函数中发现assert_param函数直呼内涵,因为我们可以在此函数中发现参数的具体位置,如下图所示:
在这里插入图片描述
它的有效值一般在上面的宏定义中,我们初始化的IO是F,故第一个参数的值为RCC_AHB1Periph_GPIOF(因为我们PF9,PF10对应的是F的IO口),如下图所示:

在这里插入图片描述
同理,第二个参数:
在这里插入图片描述
所以,我们的我们使能部分函数为:
在这里插入图片描述

IO口的初始化函数:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

很明显,第一个参数为哪个IO口,我们填GPIOF,第二个参数为一个结构体变量,我们先定义一个结构体,然后依次配结构体内部各个参数,最后在GPIO_Init函数中取此结构体的地址。(详细步骤不说,上面已经稍作演示)
在这里插入图片描述

最后主函数:

在这里插入图片描述

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于STM32F407微控制器,可以使用STM32Cube库来配置基本定时器(TIM)的库函数版本。 以下是一个简单的示例代码,演示如何配置基本定时器TIM2来生成一个周期为1秒的中断: 首先,需要在STM32CubeMX工具中进行配置。打开工具后,选择您的微控制器型号(STM32F407),然后点击"Pinout & Configuration"选项卡。在左侧的菜单栏中,选择"Timers"并启用TIM2。 接下来,在"Configuration"选项卡中,配置TIM2的时钟源和预分频器。选择"Prescaler"选项,将预分频器设置为适当的值(例如,如果使用72MHz的系统时钟,设置为719即可获得1MHz的计数频率)。 然后,选择"NVIC Settings"选项卡,并启用TIM2的中断。 最后,在"Project"菜单中选择"Generate Code",生成代码并导出到您的开发环境中。 在您的代码中,您可以使用HAL库函数来配置和控制TIM2。下面是一个示例代码,展示了如何初始化并启动TIM2: ```c #include "stm32f4xx_hal.h" // TIM2初始化函数 void TIM2_Init(void) { // 初始化结构体 TIM_HandleTypeDef htim2; htim2.Instance = TIM2; htim2.Init.Prescaler = 719; // 预分频器值 htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数模式为向上计数 htim2.Init.Period = 999; // 计数器周期为1000(1秒) htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // 初始化TIM2 HAL_TIM_Base_Init(&htim2); // 启动TIM2 HAL_TIM_Base_Start_IT(&htim2); } // TIM2中断回调函数 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM2) { // 在此处执行定时中断时的操作 } } int main(void) { // 初始化 HAL 库 HAL_Init(); // 配置系统时钟等 // 初始化和启动TIM2 TIM2_Init(); while (1) { // 主循环中执行其他操作 } } ``` 这是一个简单的示例,您可以根据您的需求进行修改和扩展。希望对您有帮助!如果您有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值