tim小程序在哪里打開 STM32實(shí)現(xiàn)定時(shí)與計(jì)數(shù)的方法有哪些?
STM32實(shí)現(xiàn)定時(shí)與計(jì)數(shù)的方法有哪些?(一)系統(tǒng)時(shí)鐘(SysTick)設(shè)置的很很簡(jiǎn)單,以下是出現(xiàn)1ms網(wǎng)絡(luò)中斷的設(shè)置,和有一種10ms顯示延遲的函數(shù):voidRCC_Configuration(voi
STM32實(shí)現(xiàn)定時(shí)與計(jì)數(shù)的方法有哪些?
(一)系統(tǒng)時(shí)鐘(SysTick)
設(shè)置的很很簡(jiǎn)單,以下是出現(xiàn)1ms網(wǎng)絡(luò)中斷的設(shè)置,和有一種10ms顯示延遲的函數(shù):
voidRCC_Configuration(void)
{
RCC_ClocksTypeDefRCC_ClockFreqSystemInit()//源自system_stm32f10x.c文件,只要?jiǎng)討B(tài)創(chuàng)建此函數(shù),則可成功RCC的配置.
RCC_GetClocksFreq(ampRCC_ClockFreq)
//SYSTICK分頻--1ms的系統(tǒng)時(shí)鐘中斷
if(SysTick_Config(SystemFrequency/1000))
{
while(1)//Captureerror
}
}
voidSysTick_Handler(void)//在自動(dòng)去處理函數(shù)中的程序
{
while(tim)
{
tim--
}
}
//動(dòng)態(tài)創(chuàng)建程序:
Delay_Ms(10)
不過,前提是要設(shè)置好,變量tim要設(shè)置里成volatile類型的。
(二)第二種牽涉到定時(shí)器定時(shí)計(jì)數(shù)時(shí)間(TIMx)
/*TIM3時(shí)鐘配置*/
TIM_TimeBaseStructure.TIM_Prescaler2//預(yù)分頻(時(shí)鐘分頻)72M/(21)24M
TIM_TimeBaseStructure.TIM_CounterModeTIM_CounterMode_Up//向上升計(jì)數(shù)法
TIM_TimeBaseStructure.TIM_Period65535//貨柜艙值18k/144125hz
TIM_TimeBaseStructure.TIM_ClockDivisionTIM_CKD_DIV1
TIM_TimeBaseStructure.TIM_RepetitionCounter0x0
TIM_TimeBaseInit(TIM3,ampTIM_TimeBaseStructure)
有定時(shí)時(shí)間計(jì)算出:
TIM_TimeBaseStructure.TIM_Prescaler2
//分頻272M/(21)/224MHz
TIM_TimeBaseStructure.TIM_Period65535//數(shù)器值65535
((1TIM_Prescaler)/72M)*(1TIM_Period)((12)/72M)*(165535)0.00273秒366.2Hz*/
盡量?jī)牲c(diǎn)(無論是大蝦網(wǎng),未經(jīng)檢驗(yàn))
(1)TIMx(1-8),在庫(kù)系統(tǒng)設(shè)置設(shè)置為的情況下,全是72M的時(shí)鐘
(2)TIM_TimeBaseStructure.TIM_RepetitionCounter0
是重復(fù)一遍計(jì)數(shù),就是反復(fù)重復(fù)逸出多少次才給你來一個(gè)逸出網(wǎng)絡(luò)中斷,
它填寫的寄存器叫TIM1RCR.
如果不是這個(gè)值不配置,上電的時(shí)候寄存器值不過洗技能的,不過1秒網(wǎng)絡(luò)中斷四次,可能都變成N秒自動(dòng)三次,讓你完美頭大!
假設(shè)不成立系統(tǒng)時(shí)鐘是72Mhz,TIM1是由PCLK2(72MHz)換取,TIM2-7是由PCLK1能得到
關(guān)鍵是設(shè)定時(shí)鐘預(yù)分頻數(shù),不自動(dòng)重停泊寄存器周期的值
/*每1秒發(fā)生一次可以更新事件(進(jìn)入掉線服務(wù)程序)。RCC_Configuration()的SystemInit()的
RCC-gtCFGR | (uint32_t)RCC_CFGR_PPRE1_DIV2因?yàn)門IM3CLK為72MHz。因此,每次來再次進(jìn)入中
斷服務(wù)程序間隔時(shí)間為
((1TIM_Prescaler)/72M)*(1TIM_Period)((17199)/72M)*(19999)1秒*/
定時(shí)器的都差不多設(shè)置
1、TIM_TimeBaseStructure.TIM_Prescaler7199//時(shí)鐘預(yù)分頻數(shù).例如:時(shí)
鐘頻率72/(時(shí)鐘預(yù)分頻1)
2、TIM_TimeBaseStructure.TIM_Period9999//手動(dòng)重加載寄存器周期的值(按時(shí)
時(shí)間)累計(jì)0xFFFF個(gè)頻率后再產(chǎn)生個(gè)沒更新的或掉線(也是說按時(shí)時(shí)間到)
3、TIM_TimeBaseStructure.TIM_CounterMode TIM1_CounterMode_Up//定時(shí)器
模式向上計(jì)數(shù)寄存器
4、TIM_TimeBaseStructure.TIM_ClockDivision 0x0//時(shí)間編緝值
5、TIM_TimeBaseInit(TIM2,ampTIM_TimeBaseStructure)//初始化設(shè)置定時(shí)器2
6、TIM_ITConfig(TIM2,TIM_IT_restore,ENABLE)//可以打開中斷瀉出自動(dòng)
7、TIM_Cmd(TIM2,ENABLE)//再打開定時(shí)器
或
電動(dòng)車控制器可以刷程序嗎?
如果能把ST-LINK調(diào)試接口的4根線焊進(jìn)去,就可以刷程序了。
串口RX,TX引腳也很比較方便焊出去,我直接用串口來對(duì)控制器發(fā)命令。
霍爾鍵入和MOS輸出的引腳也找出去了。還有一個(gè)電流傳感器的引腳。(市面上350瓦控制器,基本都都是上網(wǎng)通方案)
#defineHALL_UGPIOB,GPIO_PIN_5
#defineHALL_VGPIOB,GPIO_PIN_6
#defineHALL_WGPIOB,GPIO_PIN_7
#defineDOWN_MOS_UGPIOC,GPIO_PIN_2
#defineDOWN_MOS_VGPIOC,GPIO_PIN_1
#defineDOWN_MOS_WGPIOE,GPIO_PIN_5
#defineUP_MOS_PWM_COUNTER_U TIM1-gtCCR3L
#defineUP_MOS_PWM_COUNTER_VTIM1-gtCCR2L
#defineUP_MOS_PWM_COUNTER_WTIM1-gtCCR1L
#defineADC_PINGPIOB,GPIO_PIN_0
有霍爾的無刷電機(jī),按結(jié)構(gòu)6步驅(qū)程法,真的是太簡(jiǎn)單啊了。一開始認(rèn)為是個(gè)很隱秘的東西,做個(gè)看看,會(huì)容易就能自己抄下來了。