1.硬件
2.软件
- timer驱动文件添加
- 定时器HAL驱动层文件添加
- GPIO常用函数
- 定时器制止设置流程
- main.c步伐
- #include "sys.h"
- #include "delay.h"
- #include "led.h"
- #include "timer.h"
- int main(void)
- {
- HAL_Init(); /* 初始化HAL库 */
- stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
- led_init(); /* 初始化LED灯 */
- timer_init(5000 - 1, 7200 - 1);//定时500ms
- while(1)
- {
- // led1_on();
- // led2_off();
- // delay_ms(500);
- // led1_off();
- // led2_on();
- // delay_ms(500);
- }
- }
复制代码
- **timer_init(5000 - 1, 7200 - 1);//定时500ms**语句定时参考

- #include "led.h"
- #include "sys.h"
- //初始化GPIO函数
- void led_init(void)
- {
- GPIO_InitTypeDef gpio_initstruct;
- //打开时钟
- __HAL_RCC_GPIOB_CLK_ENABLE(); // 使能GPIOB时钟
-
- //调用GPIO初始化函数
- gpio_initstruct.Pin = GPIO_PIN_8 | GPIO_PIN_9; // 两个LED对应的引脚
- gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
- gpio_initstruct.Pull = GPIO_PULLUP; // 上拉
- gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH; // 高速
- HAL_GPIO_Init(GPIOB, &gpio_initstruct);
- //关闭LED
- led1_off();
- led2_off();
- }
- //点亮LED1的函数
- void led1_on(void)
- {
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET); // 拉低LED1引脚,点亮LED1
- }
- //熄灭LED1的函数
- void led1_off(void)
- {
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); // 拉高LED1引脚,熄灭LED1
- }
- //翻转LED1状态的函数
- void led1_toggle(void)
- {
- HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);
- }
- //点亮LED2的函数
- void led2_on(void)
- {
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET); // 拉低LED2引脚,点亮LED2
- }
- //熄灭LED2的函数
- void led2_off(void)
- {
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET); // 拉高LED2引脚,熄灭LED2
- }
- //翻转LED2状态的函数
- void led2_toggle(void)
- {
- HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
- }
复制代码
- #ifndef __LED_H__
- #define __LED_H__
- void led_init(void);
- void led1_on(void);
- void led1_off(void);
- void led1_toggle(void);
- void led2_on(void);
- void led2_off(void);
- void led2_toggle(void);
- #endif
复制代码
- #include "timer.h"
- #include "led.h"
- TIM_HandleTypeDef timer_handle = {0};//结构体赋初值0
- //定时器初始化函数
- void timer_init(uint16_t arr, uint16_t psc)
- {
- timer_handle.Instance = TIM2;//所使用的定时器
- timer_handle.Init.Prescaler = psc;
- timer_handle.Init.Period = arr;
- timer_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
- timer_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- HAL_TIM_Base_Init(&timer_handle);
- HAL_TIM_Base_Start_IT(&timer_handle);
- }
- //msp函数
- void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
- {
- if(htim->Instance == TIM2)//先判断是否用到TIM2
- {
- __HAL_RCC_TIM2_CLK_ENABLE();//TIM2时钟
- HAL_NVIC_SetPriority(TIM2_IRQn, 2, 2);设置优先级
- HAL_NVIC_EnableIRQ(TIM2_IRQn);
- }
- }
- //中断服务函数
- void TIM2_IRQHandler(void)
- {
- HAL_TIM_IRQHandler(&timer_handle);
- }
- //更新中断回调函数
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- if(htim->Instance == TIM2)//判断是否时使用TIM2
- {
- led1_toggle();
- }
- }
复制代码
- #ifndef __TIMER_H__
- #define __TIMER_H__
- #include "sys.h"
- void timer_init(uint16_t arr, uint16_t psc);
- #endif
复制代码 3.实物效果
- 硬件模块接线
LED1正—>VCC
LED1负—> B8
ST-Link下载方式
- 实行征象
LED1以500ms亮灭状态翻转。
定时器制止点灯实行keil源文件
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |