在哪個(gè)網(wǎng)站做流程圖比較好看軟件開發(fā)網(wǎng)
Driver_TIM6.c
需要注意立即進(jìn)入中斷問題,原因是預(yù)分頻寄存器并沒有更新預(yù)分頻系數(shù)。
#include "Driver_TIM6.h"
#include "Delay.h"
/*** @description: 給定時(shí)器6進(jìn)行初始化* @return {*}*/
void Driver_TIM6_Init(void)
{/* 1. 給定時(shí)器6開啟時(shí)鐘*/RCC->APB1ENR |= RCC_APB1ENR_TIM6EN;/* 2. 設(shè)置預(yù)分頻值: 分頻值7199表示7200分頻。分頻后頻率10K,周期100us */TIM6->PSC = 7200 - 1;/*3. 設(shè)置自動(dòng)重轉(zhuǎn)載寄存器的值,決定中斷發(fā)生的頻率。假設(shè)設(shè)置為9999,表示計(jì)數(shù)器計(jì)數(shù)10000次發(fā)生一次中斷。計(jì)數(shù)一次100us,10000次1000000us,正好1s*/TIM6->ARR = 10000 - 1;/* 為了避免一啟動(dòng)立即進(jìn)入更新中斷,可以先產(chǎn)生一個(gè)更新事件 預(yù)分頻寄存器和重裝載寄存器都有影子寄存器預(yù)分頻寄存器的影子寄存器和重裝載寄存器需要CNT溢出一次才能更新*/TIM6->CR1 |= TIM_CR1_URS;//產(chǎn)生一個(gè)更新事件 TIM6->EGR |= TIM_EGR_UG; /* 預(yù)分頻寄存器和重裝載寄存器的值更新到影子寄存器 */// TIM6->SR &= ~TIM_SR_UIF;/* 4. 使能更新中斷 */TIM6->DIER |= TIM_DIER_UIE;/* NVIC配置 *//* 5. 設(shè)置中斷優(yōu)先級分組 */NVIC_SetPriorityGrouping(3);/* 6. 設(shè)置中斷優(yōu)先級 */NVIC_SetPriority(TIM6_IRQn, 1);/* 7. 使能定時(shí)器6的中斷 */NVIC_EnableIRQ(TIM6_IRQn);/* 8. 使能計(jì)數(shù)器 */TIM6->CR1 |= TIM_CR1_CEN;
}/*** @description: TIM6的中斷服務(wù)函數(shù)* @return {*}*/
void TIM6_IRQHandler(void)
{TIM6->SR &= ~TIM_SR_UIF;Drviver_LED_Toggle(LED_1);printf("1\r\n");
}
Driver_TIM6.h
#ifndef __DRIVER_TIM6_H
#define __DRIVER_TIM6_H#include "stm32f10x.h"
#include "Driver_LED.h"
#include "Driver_USART.h"void Driver_TIM6_Init(void);#endif