三勺最近在學(xué)習(xí)STM32F103的定時(shí)器功能,本文主要解釋在配置通用、基本、高級(jí)定時(shí)器寄存器實(shí)現(xiàn)相應(yīng)功能時(shí)遇到的一些問題。
目標(biāo)一:基本定時(shí)器的1ms定時(shí)功能
根據(jù)技術(shù)手冊(cè)設(shè)置:
1/**
2 * @brief 定時(shí)器6 1ms定時(shí)
3 * @param None
4 * @retval None
5 */
6void Cbsp::time::time_basic(void)
7{
8 mod.nvic.MY_NVIC_Init(3,3,TIM6_IRQn,2);
9 //=====定時(shí)器6時(shí)鐘======//
10 RCC- >APB1ENR |= 1< 4;
11
12 //=====定時(shí)器6初始化=====//
13 //-自動(dòng)裝載-//
14 TIM6- >CR1 |= 1< 7;
15
16 //-更新中斷使能-//
17 TIM6- >DIER |= 1< 0;
18 //-設(shè)置計(jì)數(shù)周期-//
19 //TIM6- >CNT = 1000;
20 //-自動(dòng)重裝寄存器-//
21 TIM6- >ARR = 1000-1;
22 //-預(yù)分頻寄存器-//
23 TIM6- >PSC = 36-1;
24 //-開啟計(jì)數(shù)器使能-//
25 TIM6- >CR1 |= 1< 0;
26}
在中斷服務(wù)函數(shù)中翻轉(zhuǎn)GPIOC13的電平。
使用邏輯分析儀分析:
現(xiàn)象1 :根據(jù)邏輯分析儀的采樣結(jié)果,發(fā)現(xiàn)定時(shí)時(shí)間并不是1ms,而實(shí)2ms。
原因和步驟 :按照計(jì)算公式APB1的時(shí)鐘為36M,定時(shí)器6設(shè)置36分頻,每次累加的時(shí)間為1us,ARR寄存器為1000,則定時(shí)時(shí)間為1ms。出現(xiàn)這種情況唯一的可能就是定時(shí)器的時(shí)鐘頻率是72M導(dǎo)致的。
查看數(shù)據(jù)手冊(cè)的時(shí)鐘章節(jié)框圖可以發(fā)現(xiàn)端倪,在APB136M時(shí)鐘后,由于滿足了APB1預(yù)分配不為1的條件,定時(shí)器時(shí)鐘進(jìn)行了倍頻。
因此修改定時(shí)器的分配系數(shù)為72-1,再用邏輯分析儀抓取波形,定時(shí)時(shí)間正確。
目標(biāo)二:高級(jí)定時(shí)器3路互補(bǔ)輸出+死區(qū)
根據(jù)技術(shù)手冊(cè)設(shè)置:
1void Cbsp::time::tim_senior_PWM(void)
2{
3 RCC- >APB2ENR |= 1< 2;//*A*//
4 RCC- >APB2ENR |= 1< 3;//*B*//
5
6 //=====初始化GPIO=====//
7 GPIOA- >CRH = 0;
8 GPIOB- >CRH = 0;
9 GPIOA- >CRH |= 0x0B< (8-8)*4;
10 GPIOA- >CRH |= 0x0B< (9-8)*4;
11 GPIOA- >CRH |= 0x0B< (10-8)*4;
12 GPIOB- >CRH |= 0x0B< (13-8)*4;
13 GPIOB- >CRH |= 0x0B< (14-8)*4;
14 GPIOB- >CRH |= 0x0B< (15-8)*4;
15
16 //=====開啟定時(shí)器1時(shí)鐘=====//
17 RCC- >APB2ENR |= 1< 11;
18 //=====配置定時(shí)器 時(shí)基單元=====//
19
20 //+預(yù)分頻寄存器+//
21 TIM1- >PSC = 72-1;
22 //+自動(dòng)重裝載值+//
23 TIM1- >ARR = 100 -1;
24 //+捕獲/比較寄存器+//
25 //-設(shè)置為PWM1模式-//
26 TIM1- >CCMR1 |= (0x6)< (4);
27 TIM1- >CCMR1 |= (0x6)< (12);
28 TIM1- >CCMR2 |= (0x6)< (4);
29 //-使能預(yù)裝在寄存器-//
30 TIM1- >CCMR1 |= (1)< (11);
31 TIM1- >CCMR1 |= (1)< (3);
32 TIM1- >CCMR2 |= (1)< (3);
33
34 //-開啟自動(dòng)重裝載允許位-//
35 TIM1- >CR1 |= (0x1)< 7;
36 //設(shè)置向上計(jì)數(shù)//
37 TIM1- >CR1 &= ~((0x1)< 4);
38 //設(shè)置時(shí)鐘分頻因子
39 //TIM1- >CR1 |= ((0x2)< 8);
40
41 //+開啟通道輸出+//
42 TIM1- >CCER |= 1< 0;//CC1
43 TIM1- >CCER |= 1< 4;//CC2
44 TIM1- >CCER |= 1< 8;//CC3
45
46 TIM1- >CCER |= 1< 2;//CC1N
47 TIM1- >CCER |= 1< 6;//CC2N
48 TIM1- >CCER |= 1< 10;//CC3N
49
50 //-設(shè)置各通道占空比-//
51 TIM1- >CCR1 = 50;
52 TIM1- >CCR2 = 10;
53 TIM1- >CCR3 = 10;
54 //產(chǎn)生更新事件
55 TIM1- >EGR |= 1< 0;
56
57 //-死區(qū)時(shí)間設(shè)置-//
58 TIM1- >BDTR |= ((0x7)< 5);
59 TIM1- >BDTR |= 1;
60 //-主輸出使能-//
61 TIM1- >BDTR |= ((0x1)< 15);
62 //-開啟定時(shí)器-//
63 TIM1- >CR1 |= (0x1)< 0;
64}
現(xiàn)象: 一點(diǎn)波形也沒有,都是低電平。
原因和步驟:
第一,代碼的第61行MOE位主輸出使能,忘記設(shè)置。
第二,代碼的第58、59行,死區(qū)時(shí)間設(shè)置的比波形還長導(dǎo)致一直輸出的是低電平。
修正后波形如下:
-
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121098 -
中斷
+關(guān)注
關(guān)注
5文章
900瀏覽量
41729 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3255瀏覽量
115313 -
STM32F103
+關(guān)注
關(guān)注
33文章
479瀏覽量
63847
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論