一、stm32f1定時器簡介
1.1、定時器分類
STM32共11個定時器,2個高級控制定時器TIM1和TIM8,4個通用定時器TIM2~TIM5,兩個基本定時器TIM6和TIM7,兩個看門狗定時器和一個系統(tǒng)滴答定時器Systick.
高級定時器TIM1和TIM8的時鐘由APB1產(chǎn)生,其它六個通用定時器的時鐘由APB2產(chǎn)生。它們的最大頻率都可以配置成系統(tǒng)時鐘的頻率。
定時器種類 | 位數(shù) | 計數(shù)模式 | 捕獲/比較通道 | 應(yīng)用場景 |
---|---|---|---|---|
通用定時器 TIM2~TIM5 |
16 | 向上,向下,雙向 | 4 | 定時計數(shù),PWM,輸入捕獲,輸出比較 |
高級定時器 TIM1和TIM8 |
16 | 向上,向下,雙向 | 4 | 定時計數(shù),PWM,輸入捕獲,輸出比較 |
基本定時器 TIM6和TIM7 |
16 | 向上,向下,雙向 | 4 | 定時計數(shù) |
1.2、計數(shù)模式
通用定時器可以向上計數(shù)、向下計數(shù)、向上向下雙向計數(shù)模式。
- 向上計數(shù)模式:計數(shù)器從0計數(shù)到自動加載值(TIMx_ARR),然后重新從0開始計數(shù)并且產(chǎn)生一個計數(shù)器溢出事件。
- 向下計數(shù)模式:計數(shù)器從自動裝入的值(TIMx_ARR)開始向下計數(shù)到0,然后從自動裝入的值重新開始,并產(chǎn)生一個計數(shù)器向下溢出事件。
- 中央對齊模式(向上/向下計數(shù)):計數(shù)器從0開始計數(shù)到自動裝入的值-1,產(chǎn)生一個計數(shù)器溢出事件,然后向下計數(shù)到1并且產(chǎn)生一個計數(shù)器溢出事件;然后再從0開始重新計數(shù)。
假設(shè)我們設(shè)置的TIMx_ARR初始值為100,那么向上計數(shù)就是從0計數(shù)到99后,重新從0開始計數(shù);向下計數(shù)就是從99開始遞減計數(shù)到0,然后重新從99開始遞減計數(shù);向上/向下計數(shù)就是從0遞增計數(shù)到99,然后再從99遞減計數(shù)到0,然后反復(fù)執(zhí)行。
二、使用cubemx配置定時器
2.1、首先配置時鐘樹
這里配置成最高頻率,72MHz。高級定時器TIM1和TIM8的時鐘由APB1產(chǎn)生,其它六個通用定時器的時鐘由APB2產(chǎn)生。因此所有定時器的基礎(chǔ)頻率都是72MHz.
2.2、配置定時器
這里我們配置的是定時器TIM3.文章來源:http://www.zghlxwxcb.cn/news/detail-618980.html
- Prescaler 預(yù)分頻系數(shù)-1,我們配置的時鐘為72MHz,這里設(shè)置成72-1,得到的定時器時鐘頻率為1MHz;
- Counter Mode 計數(shù)模式,Up表示向上計數(shù),Down表示向下計數(shù),
- Counter Period 計數(shù)周期,TIMx_ARR寄存器的值,定時器的位數(shù)為16位,因此最大值為65535
使用cubemx配置定時器后,定時器并不會自動打開,在代碼中需要調(diào)用如下函數(shù)開啟定時器:文章來源地址http://www.zghlxwxcb.cn/news/detail-618980.html
HAL_TIM_Base_Start(&htim3);
2.3、實現(xiàn)us延時
void delay_us(uint16_t us)
{
uint16_t differ=__HAL_TIM_GET_COUNTER(&htim3);
uint32_t count = differ+us;
if(differ+us>65535)
{
while(__HAL_TIM_GET_COUNTER(&htim3)>(count-65535));
while(__HAL_TIM_GET_COUNTER(&htim3)<(count-65535));
}
else
{
while(differ+us>__HAL_TIM_GET_COUNTER(&htim3))
{
}
}
}
到了這里,關(guān)于STM32F1定時器(TIM1~TIM8)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!