定時(shí)器相關(guān)
定時(shí)器的時(shí)鐘來(lái)源
這里动分,定時(shí)器的時(shí)鐘來(lái)源有 4 個(gè):
1) 內(nèi)部時(shí)鐘(CK_INT)
2) 外部時(shí)鐘模式 1:外部輸入腳(TIx)
3) 外部時(shí)鐘模式 2:外部觸發(fā)輸入(ETR)辙纬,芯片手冊(cè)里面有寫(xiě)
4) 內(nèi)部觸發(fā)輸入(ITRx):使用 A 定時(shí)器作為 B 定時(shí)器的預(yù)分頻器(A 為 B 提供時(shí)鐘)罐韩。
上面圖里的TIMxCLK是哪里來(lái)的捌归,最高時(shí)鐘72MHZ
軟件上誰(shuí)來(lái)控制
TIMx_SMCR 寄存器
源碼分析
typedef struct
{
uint16_t TIM_Prescaler;
uint16_t TIM_CounterMode;
uint16_t TIM_Period;
uint16_t TIM_ClockDivision;
uint8_t TIM_RepetitionCounter;
} TIM_TimeBaseInitTypeDef;
TIM_Prescaler ------> PSC寄存器
位15:0 PSC[15:0]:預(yù)分頻器的值 (Prescaler value)
計(jì)數(shù)器的時(shí)鐘頻率CK_CNT等于fCK_PSC/(PSC[15:0]+1)笛钝。
PSC包含了當(dāng)更新事件產(chǎn)生時(shí)裝入當(dāng)前預(yù)分頻器寄存器的值
所以定時(shí)器的時(shí)鐘頻率 = ck_int / (PSC[15:0]+1)
TIM_CounterMode----------> 計(jì)數(shù)的方式
TIM_Period--------------------->ARR 重裝載寄存器
在向上計(jì)數(shù)模式中垫卤,計(jì)數(shù)器從0計(jì)數(shù)到自動(dòng)加載值(TIMx_ARR計(jì)數(shù)器的內(nèi)容)社牲,
從下圖中看0也算一個(gè)周期甥厦,即arr的值如果為1纺铭,其實(shí)計(jì)數(shù)了2個(gè)定時(shí)周期。
TIM_ClockDivision ----------->CKD是對(duì)于輸入的分頻刀疙,在輸入捕獲的時(shí)候要用到舶赔,相當(dāng)于濾波
步進(jìn)電機(jī)
42步進(jìn)電機(jī)
藍(lán)A+,紅A-谦秧,綠B+竟纳,黑B-
時(shí)鐘相關(guān)
RCC_CFGR 來(lái)控制APB2,APB1和系統(tǒng)時(shí)鐘的關(guān)系油够,也就是分頻系數(shù)怎么確定
PWM輸出
有一個(gè)比較寄存器蚁袭,0-100向上計(jì)數(shù),比較寄存器的值是50的話(huà)石咬,周期相當(dāng)于就是100*定時(shí)器頻率揩悄, 占空比通過(guò)比較寄存器調(diào)整
Systeminit函數(shù)進(jìn)行初始化
PWM輸出的框圖
110: PWM模式1- 在向上計(jì)數(shù)時(shí),一旦TIMx_CNT<TIMx_CCR1時(shí)通道1為有效電平(就是高電平)鬼悠,否則為
無(wú)效電平删性;在向下計(jì)數(shù)時(shí)亏娜,一旦TIMx_CNT>TIMx_CCR1時(shí)通道1為無(wú)效電平(OC1REF=0),否則為有效電平(OC1REF=1)蹬挺。
111: PWM模式2- 在向上計(jì)數(shù)時(shí)维贺,一旦TIMx_CNT<TIMx_CCR1時(shí)通道1為無(wú)效電平,否則為
有效電平巴帮;在向下計(jì)數(shù)時(shí)溯泣,一旦TIMx_CNT>TIMx_CCR1時(shí)通道1為有效電平,否則為無(wú)效電
平榕茧。
注1:一旦LOCK級(jí)別設(shè)為3(TIMx_BDTR寄存器中的LOCK位)并且CC1S=’00’(該通道配置成輸
出)則該位不能被修改垃沦。
注2:在PWM模式1或PWM模式2中,只有當(dāng)比較結(jié)果改變了或在輸出比較模式中從凍結(jié)模式
切換到PWM模式時(shí)用押, OC1REF電平才改變肢簿。
PWM1模式是CNT < CCR1,通道1為有效電平,但是最終輸出的電平通過(guò)誰(shuí)來(lái)控制呢蜻拨, CCER.CC1P
CCER:CC1P位:
0: OC1高電平有效
1: OC1低電平有效
如果PWM1模式池充,CCER:CC1P為0, 當(dāng)CNT < CCR1時(shí)就會(huì)輸出高電平缎讼,CCER:CC1P為1, 當(dāng)CNT < CCR1時(shí)收夸, 輸出低電平
PWM怎么設(shè)置
????必須通過(guò)設(shè)置TIMx_CCMRx寄存器的OCxPE位使能相應(yīng)的預(yù)裝載寄存器,最后還要設(shè)置TIMx_CR1寄存器的ARPE位休涤, (在向上計(jì)數(shù)或中心對(duì)稱(chēng)模式中)使能自動(dòng)重裝載的預(yù)裝載寄存器
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);//開(kāi)啟預(yù)裝載寄存器
OC1PE: 輸出比較1預(yù)裝載使能 (Output compare 1 preload enable)
0:禁止TIMx_CCR1寄存器的預(yù)裝載功能咱圆,可隨時(shí)寫(xiě)入TIMx_CCR1寄存器,并且新寫(xiě)入的數(shù)
值立即起作用功氨。
1:開(kāi)啟TIMx_CCR1寄存器的預(yù)裝載功能,讀寫(xiě)操作僅對(duì)預(yù)裝載寄存器操作手幢, TIMx_CCR1的
預(yù)裝載值在更新事件到來(lái)時(shí)被傳送至當(dāng)前寄存器中捷凄。
/*********************************************/
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
PWM對(duì)應(yīng)的gpio是哪一個(gè)引腳
PB5可以復(fù)用成定時(shí)器3通道2PWM輸出引腳
gpio口應(yīng)該怎么樣配置
/*定時(shí)器的頻率是10KHZ, 計(jì)一個(gè)數(shù)0.1ms, */
tim3_ch2_pwm_init(4999,7199, 2500);
串口通信
單工:
數(shù)據(jù)傳輸只支持?jǐn)?shù)據(jù)在一個(gè)方向上傳輸
半雙工:
允許數(shù)據(jù)在兩個(gè)方向上傳輸,但是围来,在某一時(shí)刻跺涤,只允許數(shù)
據(jù)在一個(gè)方向上傳輸,它實(shí)際上是一種切換方向的單工通信监透;
全雙工:
允許數(shù)據(jù)同時(shí)在兩個(gè)方向上傳輸桶错,因此,全雙工通信是兩個(gè)
單工通信方式的結(jié)合胀蛮,它要求發(fā)送設(shè)備和接收設(shè)備都有獨(dú)立
的接收和發(fā)送能力院刁。
同步通信:帶時(shí)鐘同步信號(hào)傳輸。
-SPI粪狼,IIC通信接口
異步通信:不帶時(shí)鐘同步信號(hào)退腥。
-UART(通用異步收發(fā)器),單總線(xiàn)
UART:通用異步收發(fā)器
USART:通用同步異步收發(fā)器
串口通信的過(guò)程
串口寄存器相關(guān)
引腳對(duì)應(yīng)關(guān)系