历史上的今天
今天是:2024年09月06日(星期五)
2019年09月06日 | stm32f429 中通过基本定时器中断控制LED灯亮一秒、灭一秒
2019-09-06 来源:eefocus
stm32f429中基本定时器有两个,通用定时器有十个,高级定时器有两个。其中基本定时器为TIM6和TIM7。
此处通过编写TIM7定时中断控制LED灯亮灭,TIM6与之类似。
首先可以新建一个.c 和.h 文件,在.c文件中进行TIM7函数定义等,如下图所示:
#include "bsp_tim_basic.h"
static void BASIC_TIMx_Mode_Config()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE);//开启时钟
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//结构体申明
TIM_TimeBaseInitStruct.TIM_Prescaler=8999;//设置时钟周期为10000hz psc 90M/(psc+1)
TIM_TimeBaseInitStruct.TIM_Period=9999;//设置ARR 10000次
TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);//使能更新
TIM_TimeBaseInit(TIM7,&TIM_TimeBaseInitStruct);//定时器初始化
TIM_Cmd(TIM7,ENABLE);//定时器使能
}
static void NVIC_TIMBasic_Config()
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStruct.NVIC_IRQChannel=TIM7_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
void TIMx_Basic_Config(void)
{
NVIC_TIMBasic_Config();
BASIC_TIMx_Mode_Config();
}
由于前两个函数前有static修饰,所以写了最后一个函数以便于其他文件对前两个函数的调用。
在.h文件中对所需的头文件以及可被外部调用的函数进行申明。
#ifndef _BSP_TIM_BASIC_H
#define _BSP_TIM_BASIC_H
#include "stm32f4xx_tim.h"
#include "stm32f4xx_rcc.h"
#include "misc.h"
extern void TIMx_Basic_Config(void);
#endif
这边编写完成后需要记得在stm32f4xx_it.c中进行中断函数的编写,其中控制LED灯亮灭便在此处被执行。
void TIM7_IRQHandler(void)
{
if (TIM_GetITStatus(TIM7,TIM_IT_Update)!=RESET)
{
GPIO_WriteBit(GPIOC,GPIO_Pin_1,1-(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_1)));
}
TIM_ClearITPendingBit(TIM7,TIM_IT_Update);
}
GPIO_WriteBit用于给LED灯置所想状态,在这里的最后一个参数通过GPIO_ReadOutputDataBit函数读当前的状态,通过1减去当前状态来获得相反的状态。
在main函数中只要进行简单的调用即可。
#include "stm32f4xx.h"
#include "bsp_led.h"
#include "bsp_tim_basic.h"
#include "bsp_usart.h"
int main(void)
{
usart1_init();
LED_GPIO_Config();
TIMx_Basic_Config();
while(1)
{
}
}
下一篇:stm32实现LED灯亮灭
史海拾趣
|
各位高手有没有测试过加速计和陀螺仪这两颗的功能阿,三轴加速计有X,Y,Z三个电压输出,都是经过其内部的AD转换后输出的,不知道这三个方向上的电压是怎么变化的,是有加速度的时候变化呢,还是位置改变了变化啊? 陀螺仪有X,Y两个电压输出,也是 ...… 查看全部问答> |
|
很多MTD驱动都有调用simple_map_init()函数来初始化read,write等函数,不知道这个函数的用法,请大虾帮忙讲一讲啊,如果我需要改变这些read,write函数,该怎么办啦?… 查看全部问答> |
|
求职: 请问有没有人需要高级WINCE工程师--限深圳地区! 求职: 请问有没有人需要高级WINCE驱动工程师--限深圳地区! 如有,请如下EMAIL联系 lumit_hu@126.com… 查看全部问答> |
|
上周在研讨会上买了英蓓特的开发板,试了下,感觉有几个地方不爽,所以就自己动手DIY了:1)USB供电问题,必须插2条USB线,可怜我的本本一共才3个,鼠标用了一个,被他全占了,其它USB-232就没法用了;2)板子附带的1602没有接背光,而实际这 ...… 查看全部问答> |
|
各位高手大家好,小妹我用此板子的UART出了一點問題,大家可以幫幫我嗎? 感激不盡 問題是這樣的,我開啟了八個UART,為了使輸入資料可以做辨識,個別在UART4跟UART5的地方 加了三個#字號跟一個通道編號 例如:UART4是 ###Edata 這樣 ...… 查看全部问答> |
|
SimpliciTI简介: SimpliciTI是TI开发的专门针对其CCxxxx系列无线通信芯片的网络协议。 它支持两种网络拓扑结构:严格的点对点通信和基于星型的网络拓扑结构,在星型连接中Hub点在SimplciTI被称为Access Point,简称AP.(AP就是常说的网关,数据中 ...… 查看全部问答> |
|
老师给了一块tm4c 1294的launchpad,说让我们自己玩,但之前没接触过arm这些东西,接触过单片机;所以完全不知道怎么开始??这块板子能干嘛我都不知道,该怎么学习??完全处于迷茫状态??望大神相助,指点一二,让我有个方向!!非常感谢! … 查看全部问答> |




