STM32基本定时器控制LED闪烁代码
2024-09-06 04:41:36
led.c
#include "led.h"
void LED_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void LED_Toggle(void)
{
GPIOB->ODR ^= GPIO_Pin_0;
}
led.h
#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"
void LED_Config(void);
void LED_Toggle(void);
#endif
tim_timebase.c
#include "tim_timebase.h"
#include "led.h"
int a = 0;
static void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStruct.NVIC_IRQChannel=TIM3_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStruct);
}
void TIM3_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_Config();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseInitStruct.TIM_Period=71;
TIM_TimeBaseInitStruct.TIM_Prescaler=1000;//1ms
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3, TIM_IT_Update)) a++;
if(a == 1000)
{
LED_Toggle();
a = 0;
}
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
tim_timebase.h
#ifndef __TIM_TIMEBASE_H
#define __TIM_TIMEBASE_H
#include "stm32f10x.h"
void TIM3_Config(void);
#endif
main.c
#include "stm32f10x.h"
#include "led.h"
#include "tim_timebase.h"
int main(void)
{
LED_Config();
TIM3_Config();
while(1)
{
}
}
最新文章
- Guava学习笔记:Preconditions优雅的检验参数
- Android -- ActivityLifeCycleCallbacks
- Datasets for Data Mining and Data Science
- 2016 Hunan Province Programming Contest
- Solr + Hadoop = Big Data Love
- 纯CSS绘制三角形
- OptiScroll 公共例子(只修改了滚动条颜色)
- trove最新命令简单分类解析
- SVN使用指引(Windows)
- TensorFlow从1到2(一)续讲从锅炉工到AI专家
- centos7下vim8.1的编译安装教程
- git 随笔
- JavaScript--事件对象(25)
- 【第五课】LNMP环境的入门
- mysql 创建表单
- oracle tnsnames.ora文件用法说明
- MYSQL COST optimizer
- 在python中逐行读取大文件
- Android开发,布局xml文件命名注意事项——不能包含任何大写字母
- 【BZOJ】1188 [HNOI2007]分裂游戏
热门文章
- Handler机制与生产者消费者模式
- 使用EF Core更新与修改生产数据库
- Spring bean装配流程和三级缓存
- 2022-08-12-esp32把玩记-②_用Micropython点ssd1306_oled屏幕
- ubuntu20.04 利用xrandr命令修改多显示器分辨率
- 7_vue的数据代理,双向绑定
- 43.Permission源码解析和自定义权限类
- AgileBoot - 如何集成内置数据库H2和内置Redis
- nrf52——DFU升级USB/UART升级方式详解(基于SDK开发例程)
- 如何在.NET程序崩溃时自动创建Dump?