国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32F103C8T6定時(shí)器實(shí)現(xiàn)led的周期閃爍及PWM實(shí)現(xiàn)流水燈

這篇具有很好參考價(jià)值的文章主要介紹了STM32F103C8T6定時(shí)器實(shí)現(xiàn)led的周期閃爍及PWM實(shí)現(xiàn)流水燈。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、問題描述

(一)定時(shí)器實(shí)現(xiàn)LED燈的周期閃爍

  1. 通過定時(shí)器Timer方式實(shí)現(xiàn)時(shí)間的精準(zhǔn)控制,相當(dāng)于給CPU上了一個(gè)鬧鐘,CPU平時(shí)處理其它任務(wù),當(dāng)定時(shí)時(shí)間到了以后,處理定時(shí)相關(guān)的任務(wù)。請(qǐng)?jiān)O(shè)置一個(gè)5秒的定時(shí)器,每隔5秒從串口發(fā)送“hello windows!”;同時(shí)設(shè)置一個(gè)2秒的定時(shí)器,讓LED等周期性地閃爍。

(二)輸出PWM波形實(shí)現(xiàn)流水燈

  1. 使用TIM3和TIM4,分別輸出一個(gè)PWM波形,PWM的占空比隨時(shí)間變化,去驅(qū)動(dòng)你外接的一個(gè)LED以及最小開發(fā)板上已焊接的LED(固定接在 PC13 GPIO端口),實(shí)現(xiàn)2個(gè) LED呼吸燈的效果。

二、定時(shí)器實(shí)現(xiàn)LED燈的周期閃爍

(一)STM32定時(shí)器介紹

1.簡介

STM32f103系列一共有8個(gè)16位的定時(shí)器;其中TIM6、TIM7是基本定時(shí)器,TIM2、3、4、5是通用定時(shí)器,TIM1、8是高級(jí)定時(shí)器;這些定時(shí)器使STM32具有定時(shí)、信號(hào)的頻率測(cè)量、信號(hào)的PWM測(cè)量、PWM輸出、三相6步電機(jī)控制及編碼器接口等功能,適用于工業(yè)控制領(lǐng)域。

2.定時(shí)器分類

STM32F1 系列中,除了互聯(lián)型的產(chǎn)品,共有 8 個(gè)定時(shí)器,分為基本定時(shí)器,通用定時(shí)器和高級(jí)定時(shí)器?;径〞r(shí)器 TIM6 和 TIM7 是一個(gè) 16 位的只能向上計(jì)數(shù)的定時(shí)器,只能定時(shí),沒有外部 IO。通用定時(shí)器 TIM2/3/4/5 是一個(gè) 16 位的可以向上/下計(jì)數(shù)的定時(shí)器,可以定時(shí),可以輸出比較,可以輸入捕捉,每個(gè)定時(shí)器有四個(gè)外部 IO。高級(jí)定時(shí)器 TIM1/8是一個(gè) 16 位的可以向上/下計(jì)數(shù)的定時(shí)器,可以定時(shí),可以輸出比較,可以輸入捕捉,還可以有三相電機(jī)互補(bǔ)輸出信號(hào),每個(gè)定時(shí)器有 8 個(gè)外部 IO。
stm32f103c8t6 pwm,stm32,單片機(jī),arm

2.1基本定時(shí)器

基本定時(shí)器只具備最基本的定時(shí)功能,就是累加的時(shí)鐘脈沖數(shù)超過預(yù)定值時(shí),能觸發(fā)中斷或觸發(fā)DMA請(qǐng)求;
芯片內(nèi)部與DAC外設(shè)相連,可通過觸發(fā)輸出驅(qū)動(dòng)DAC,也可以作為其他通用定時(shí)器的時(shí)鐘基準(zhǔn);
使用的時(shí)鐘源都是TIMxCLK,時(shí)鐘源經(jīng)過預(yù)分頻器輸入至脈沖計(jì)數(shù)器TIMx_CNT,基本定時(shí)器只能工作在向上計(jì)數(shù)模式,在重載寄存器TIMx_ARR中保存的是定時(shí)器的溢出值;
工作時(shí),脈沖計(jì)數(shù)器TIMx_CNT由時(shí)鐘觸發(fā)進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)器的值x等于重載寄存器中保存的數(shù)值N時(shí),產(chǎn)生溢出事件,可觸發(fā)中斷或DMA請(qǐng)求,然后計(jì)數(shù)器重新置0,重新向上計(jì)數(shù);
stm32f103c8t6 pwm,stm32,單片機(jī),arm
①時(shí)鐘源
定時(shí)器時(shí)鐘 TIMxCLK,即內(nèi)部時(shí)鐘 CK_INT,經(jīng) APB1 預(yù)分頻器后分頻提供,如果APB1 預(yù)分頻系數(shù)等于 1,則頻率不變,否則頻率乘以 2,庫函數(shù)中 APB1 預(yù)分頻的系數(shù)是 2,即 PCLK1=36M,所以定時(shí)器時(shí)鐘TIMxCLK=36*2=72M。
②計(jì)數(shù)器時(shí)鐘
定時(shí)器時(shí)鐘經(jīng)過 PSC 預(yù)分頻器之后,即 CK_CNT,用來驅(qū)動(dòng)計(jì)數(shù)器計(jì)數(shù)。PSC 是一個(gè)16 位的預(yù)分頻器,可以對(duì)定時(shí)器時(shí)鐘 TIMxCLK 進(jìn)行 1~65536 之間的任何一個(gè)數(shù)進(jìn)行分頻。具體計(jì)算方式為:CK_CNT=TIMxCLK/(PSC+1)。
③計(jì)數(shù)器
計(jì)數(shù)器 CNT 是一個(gè) 16 位的計(jì)數(shù)器,只能往上計(jì)數(shù),最大計(jì)數(shù)值為 65535。當(dāng)計(jì)數(shù)達(dá)到自動(dòng)重裝載寄存器的時(shí)候產(chǎn)生更新事件,并清零從頭開始計(jì)數(shù)。
④自動(dòng)重裝載寄存器
自動(dòng)重裝載寄存器 ARR 是一個(gè) 16 位的寄存器,這里面裝著計(jì)數(shù)器能計(jì)數(shù)的最大數(shù)值。當(dāng)計(jì)數(shù)到這個(gè)值的時(shí)候,如果使能了中斷的話,定時(shí)器就產(chǎn)生溢出中斷。
5. 定時(shí)時(shí)間的計(jì)算
定時(shí)器的定時(shí)時(shí)間等于計(jì)數(shù)器的中斷周期乘以中斷的次數(shù)。計(jì)數(shù)器在 CK_CNT 的驅(qū)動(dòng)下,計(jì)一個(gè)數(shù)的時(shí)間則是 CK_CLK 的倒數(shù),等于:1/(TIMxCLK/(PSC+1)),產(chǎn)生一次中斷的時(shí)間則等于:1/(CK_CLK * ARR)。如果在中斷服務(wù)程序里面設(shè)置一個(gè)變量 time,用來 記 錄 中斷 的 次 數(shù),那 么 就 可以 計(jì) 算 出我們 需 要 的定 時(shí) 時(shí) 間等于 :1/CK_CLK * (ARR+1)*time。

2.2通用定時(shí)器

通用定時(shí)器除了基本的定時(shí),它主要用在測(cè)量輸入脈沖的頻率、脈寬與輸出PEM脈沖的場合,還具有編碼器的接口,如下圖所示:

stm32f103c8t6 pwm,stm32,單片機(jī),arm
1.捕獲/比較寄存器
它在輸入時(shí)被用于捕獲(存儲(chǔ))輸入脈沖在電平發(fā)生翻轉(zhuǎn)時(shí)脈沖計(jì)數(shù)器的當(dāng)前計(jì)數(shù)值,從而實(shí)現(xiàn)脈沖的頻率測(cè)量;
在輸出時(shí)被用來存儲(chǔ)一個(gè)脈沖數(shù)值,把這個(gè)數(shù)值用于與脈沖計(jì)數(shù)器的當(dāng)前計(jì)數(shù)值進(jìn)行比較,根據(jù)比較結(jié)果進(jìn)行不同的電平輸出。
2.PWM輸出過程分析
若配置脈沖計(jì)數(shù)器為向上計(jì)數(shù),而重載寄存器被配置為N,即計(jì)數(shù)器的當(dāng)前值x在時(shí)鐘源的驅(qū)動(dòng)下不斷累加,當(dāng)計(jì)數(shù)器的值大于N時(shí),回充值計(jì)數(shù)器的數(shù)值為0并重新計(jì)數(shù);
在計(jì)數(shù)器計(jì)數(shù)的同時(shí),計(jì)數(shù)器的計(jì)數(shù)值x會(huì)與比較寄存器TIMx_CCR預(yù)先存儲(chǔ)的數(shù)值A(chǔ)進(jìn)行比較。當(dāng)計(jì)數(shù)器的值小于A時(shí),輸出高電平(或低電平),相反則反之;
循環(huán)下去即得到的輸出脈沖周期就為重載寄存器TIMx_ARR存儲(chǔ)的數(shù)值(N+1)乘以觸發(fā)脈沖的時(shí)鐘周期,其脈寬則為比較寄存器的值A(chǔ)乘以觸發(fā)脈沖的時(shí)鐘周期,即輸出PEM的占空比為A/(N+1).
3.PWM輸入過程分析
當(dāng)定時(shí)器被配置為輸入功能時(shí),可以用于檢測(cè)輸入到GPIO引腳的信號(hào),此時(shí)捕獲/比較寄存器TIMx_CRR被用作捕獲功能,簡稱捕獲寄存器。
下圖為PWM輸入時(shí)的脈沖寬度檢測(cè)時(shí)序圖;

stm32f103c8t6 pwm,stm32,單片機(jī),arm

工作過程:要測(cè)量的PWM脈沖通過GPIO引腳輸入到定時(shí)器的脈沖檢測(cè)通道,為圖中的TI1;
在輸入脈沖TI1的上升沿到達(dá)時(shí),觸發(fā)IC1和IC2輸入捕獲中斷,這時(shí)把脈沖計(jì)數(shù)器的計(jì)數(shù)值復(fù)位為0,于是計(jì)數(shù)器的計(jì)數(shù)值X在時(shí)鐘源的驅(qū)動(dòng)下從0開始不斷累加,直到TI1出現(xiàn)下降沿,觸發(fā)IC2捕獲事件,此時(shí)TIMx_CCR2把計(jì)數(shù)器的當(dāng)前值2存儲(chǔ)起來,計(jì)數(shù)器繼續(xù)累加,直到TI1出現(xiàn)第二個(gè)上升沿,出發(fā)了IC1捕獲事件,得到的當(dāng)前計(jì)數(shù)值被保存到TIMX_CCR1中。
根據(jù)保存的數(shù)值很容易得到占空比和周期。
4.定時(shí)器的時(shí)鐘源
通用定時(shí)器可以使用外部脈沖作為定時(shí)器的時(shí)鐘源;
使用外部時(shí)鐘源時(shí),要使用寄存器進(jìn)行觸發(fā)邊沿、濾波器帶寬的配置。

2.3高級(jí)定時(shí)器

此類定時(shí)器除了具有基本、通用定時(shí)器的所有功能外,還具有三相6步電機(jī)的接口、剎車功能及用于PWM驅(qū)動(dòng)電路的死區(qū)時(shí)間控制,使其非常使用于電機(jī)控制。

高級(jí)定時(shí)器結(jié)構(gòu)如下圖所示:
stm32f103c8t6 pwm,stm32,單片機(jī),arm
相比較另外兩種定時(shí)器,主要多出了BRK、DTG兩個(gè)結(jié)構(gòu),具有了控制死區(qū)時(shí)間的控制功能;

死區(qū)時(shí)間:在三相橋的PWM驅(qū)動(dòng)電路中,上下兩個(gè)橋臂的PWM驅(qū)動(dòng)信號(hào)是互補(bǔ)的,即上下橋臂輪流導(dǎo)通,但實(shí)際上為了防止出現(xiàn)上下兩個(gè)臂同時(shí)導(dǎo)通(會(huì)造成短路),在上下兩臂切換時(shí)留一小段時(shí)間,上下臂都施加關(guān)斷信號(hào)。
stm32f103c8t6 pwm,stm32,單片機(jī),arm
在保證不出現(xiàn)短路的情況下,死區(qū)時(shí)間越短越好,時(shí)間太長會(huì)導(dǎo)致OCx或OCxN輸出不正常.

3.定時(shí)器時(shí)基

內(nèi)部時(shí)鐘(CK_INT)
外部時(shí)鐘模式 1:外部輸入腳(TIx)
外部時(shí)鐘模式 2:外部觸發(fā)輸入(ETR)
內(nèi)部觸發(fā)輸入(ITRx):使用 A 定時(shí)器作為 B 定時(shí)器的預(yù)分頻器(A 為 B 提供時(shí)鐘)。 這些時(shí)鐘,具體選擇哪個(gè)可以通過 TIMx_SMCR 寄存器的相關(guān)位來設(shè)置。

4.計(jì)數(shù)器模式

向上計(jì)數(shù)模式:計(jì)數(shù)器從0計(jì)數(shù)到自動(dòng)加載值(TIMx_ARR),然后重新從0開始計(jì)數(shù)并且產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件
向下計(jì)數(shù)模式:計(jì)數(shù)器從自動(dòng)裝入的值(TIMx_ARR)開始向下計(jì)數(shù)到0,然后從自動(dòng)裝入的值重新開始,并產(chǎn)生一個(gè)計(jì)數(shù)器向下溢出事件
中央對(duì)齊模式(向上/向下計(jì)數(shù)):計(jì)數(shù)器從0開始計(jì)數(shù)到自動(dòng)裝入的值-1,產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件,然后向下計(jì)數(shù)到1并且產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件;然后再從0開始重新計(jì)數(shù)

(二)新建工程

1.創(chuàng)建項(xiàng)目

stm32f103c8t6 pwm,stm32,單片機(jī),arm
選擇目的芯片,本文選用STM32F103C8T6
stm32f103c8t6 pwm,stm32,單片機(jī),arm

2.相關(guān)設(shè)置

  1. RCC設(shè)置stm32f103c8t6 pwm,stm32,單片機(jī),arm

  2. SYS設(shè)置stm32f103c8t6 pwm,stm32,單片機(jī),arm

  3. 端口設(shè)置
    選擇PA4為LED端口,設(shè)置為GPIO_Outputstm32f103c8t6 pwm,stm32,單片機(jī),arm

  4. 定時(shí)器設(shè)置
    這里使用TIM2定時(shí)器2和TIM3定時(shí)器3來實(shí)現(xiàn)定時(shí)的功能。選中定時(shí)器2;配置定時(shí)器2的時(shí)鐘源為內(nèi)部時(shí)鐘;設(shè)置分頻系數(shù)為71,向上計(jì)數(shù)模式,計(jì)數(shù)周期為5000,實(shí)現(xiàn)2秒stm32f103c8t6 pwm,stm32,單片機(jī),arm
    stm32f103c8t6 pwm,stm32,單片機(jī),arm
    分頻系數(shù)那里雖然寫的是71,但系統(tǒng)處理的時(shí)候會(huì)自動(dòng)加上1,所以實(shí)際進(jìn)行的是72分頻。由于時(shí)鐘我們一般會(huì)配置為72MHZ,所以72分頻后得到1MHZ的時(shí)鐘。1MHZ的時(shí)鐘,計(jì)數(shù)5000次,得到時(shí)間5000/1000000=0.005秒。也就是每隔0.005秒定時(shí)器2會(huì)產(chǎn)生一次定時(shí)中斷。

  5. 中斷設(shè)置stm32f103c8t6 pwm,stm32,單片機(jī),arm
    stm32f103c8t6 pwm,stm32,單片機(jī),arm

  6. USART1設(shè)置stm32f103c8t6 pwm,stm32,單片機(jī),arm

  7. 時(shí)鐘設(shè)置stm32f103c8t6 pwm,stm32,單片機(jī),arm

  8. 其他
    注意路徑中不要含有中文stm32f103c8t6 pwm,stm32,單片機(jī),arm
    stm32f103c8t6 pwm,stm32,單片機(jī),arm

(三)代碼編寫

  1. 直接打開上步生成的工程文件,在main.c添加定時(shí)器啟動(dòng)代碼
	HAL_TIM_Base_Start_IT(&htim2);
	HAL_TIM_Base_Start_IT(&htim3);

stm32f103c8t6 pwm,stm32,單片機(jī),arm

  1. 添加串口輸出hello windows代碼
	uint8_t hello[20]="hello windows!\r\n";

stm32f103c8t6 pwm,stm32,單片機(jī),arm

3.定時(shí)器中斷回調(diào)函數(shù)

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	static uint32_t time_cnt =0;
	static uint32_t time_cnt3 =0;
	if(htim->Instance == TIM2)
	{
		if(++time_cnt >= 400)
		{
			time_cnt =0;
			HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_4);
		}
	}
	if(htim->Instance == TIM3)
	{
		if(++time_cnt3 >= 1000)
		{
			time_cnt3 =0;
    HAL_UART_Transmit(&huart1,hello,20,100000);
		}
			
	}
}

stm32f103c8t6 pwm,stm32,單片機(jī),arm
編譯一下
stm32f103c8t6 pwm,stm32,單片機(jī),arm

(四)線路連接

1.USB to TTL ——STM32F103C8T6

       3V3 —— 3V3
       GND—— GND
       RXD——A9
       TXD ——A10

2.STM32F103C8T6——LED

 LED燈短腳 —— A4
 LED燈長腳 —— 3V3  

(五)實(shí)現(xiàn)效果

1.燒錄

stm32f103c8t6 pwm,stm32,單片機(jī),arm

2.效果展示

LED周期閃爍

LED閃爍

串口輸出

串口輸出hello windows

三、輸出PWM波形實(shí)現(xiàn)流水燈

(一)PWM簡介

1.PWM含義

PWM(Pulse Width Modulation)即脈沖寬度調(diào)制,簡稱脈寬調(diào)制。它是利用微處理器的數(shù)字輸出來對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù);它是一種模擬控制方式,根據(jù)相應(yīng)載荷的變化來調(diào)制晶體管基極或MOS管柵極的偏置,來實(shí)現(xiàn)晶體管或MOS管導(dǎo)通時(shí)間的改變,從而實(shí)現(xiàn)開關(guān)穩(wěn)壓電源輸出的改變。

2.基本原理

PWM就是對(duì)逆變電路開關(guān)器件的通斷進(jìn)行控制,使輸出端得到一系列幅值相等的脈沖,用這些脈沖來代替正弦波或所需要的波形。也可以這樣理解,PWM是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。PWM信號(hào)仍然是數(shù)字的,因?yàn)樵诮o定的任何時(shí)刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。只要帶寬足夠,任何模擬值都可以使用 PWM 進(jìn)行編碼。

3.優(yōu)點(diǎn)及應(yīng)用范圍

由于其控制簡單、靈活和動(dòng)態(tài)響應(yīng)好等優(yōu)點(diǎn)而成為電力電子技術(shù)應(yīng)用最廣泛的控制方式,其應(yīng)用領(lǐng)域包括測(cè)量,通信, 功率控制與變換,電動(dòng)機(jī)控制、伺服控制、調(diào)光、開關(guān)電源,甚至某些音頻放大器,因此學(xué)習(xí)PWM具有十分重要的現(xiàn)實(shí)意義。

4.PWM配置介紹

在上步中介紹了STM32的定時(shí)器,并提到PWM輸出是STM32的定時(shí)器的功能之一,為了實(shí)現(xiàn)PWM功能,需要使用定時(shí)器中的比較寄存器(TIMx_CCRx)。
捕獲/比較模式寄存器總共2個(gè),TIMx_CCMR1和TIMx_CCMR2
TIMx_CCMR1控制CH1和CH2,TIMx_CCMR2控制CH3和CH4。該寄存器的某些位在不同模式下功能不一樣,上面一層對(duì)應(yīng)輸出而下面一層對(duì)應(yīng)輸入;
其中模式設(shè)置位OCxM位,此位由3位組成,一共可以配置成7種模式,我們使用的是PWM模式,所以這三位必須為110/111。
當(dāng)定時(shí)器以PWM模式工作時(shí),會(huì)自動(dòng)將TIMx_CCRx的值與TIMx_CNT(計(jì)數(shù)寄存器)中的值做比較,當(dāng)TIMx_CNT中的值小于TIMx_CCRx的值時(shí),PWM輸出引腳輸出高電平,大于時(shí)則輸出低電平。因此知道了PWM信號(hào)的周期和占空比可以通過設(shè)置比較寄存器TIMx_CCRx和定時(shí)器重載寄存器TIMx_ARR來控制。PWM的占空比可以通過下圖公式計(jì)算:
stm32f103c8t6 pwm,stm32,單片機(jī),arm

4.1 PWM輸出的模式區(qū)別

PWM模式1:在向上計(jì)數(shù)時(shí),一旦
TIMx_CNT<TIMx_CCR1時(shí)通道1為有效電平,否則為無效電平;
在向下計(jì)數(shù)時(shí),一旦TIMx_CNT>TIMx_CCR1時(shí)通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)
PWM模式2:在向上計(jì)數(shù)時(shí),一旦TIMx_CNT<TIMx_CCR1時(shí)通道1為無效電平,否則為有效電平;
在向下計(jì)數(shù)時(shí),一旦TIMx_CNT>TIMx_CCR1時(shí)通道1為有效電平,否則為無效電平
注意:PWM的模式只是區(qū)別什么時(shí)候是有效電平,但并沒有確定是高電平有效還是低電平有效。這需要結(jié)合CCER寄存器的CCxP位的值來確定
例如:若PWM模式1,且CCER寄存器的CCxP位為0,則當(dāng)TIMx_CNT<TIMx_CCR1時(shí),輸出高電平;同樣的,若PWM模式1,且CCER寄存器的CCxP位為2,則當(dāng)TIMx_CNT<TIMx_CCR1時(shí),輸出低電平

4.2. PWM的計(jì)數(shù)模式

向上計(jì)數(shù)模式:
下面是一個(gè)PWM模式1的例子。當(dāng)TIMx_CNT<TIMx_CCRx時(shí)PWM信號(hào)參考OCxREF為高,否則為低。如果TIMx_CCRx中的比較值大于自動(dòng)重裝載值(TIMx_ARR),則OCxREF保持為’1’。如果比較值為0,則OCxREF保持為’0’。

向下計(jì)數(shù)模式:
在PWM模式1,當(dāng)TIMx_CNT>TIMx_CCRx時(shí)參考信號(hào)OCxREF為低,否則為高。如果TIMx_CCRx中的比較值大于TIMx_ARR中的自動(dòng)重裝載值,則OCxREF保持為’1’。該模式下不能產(chǎn)生0%的PWM波形。

中央對(duì)齊模式:
當(dāng)TIMx_CR1寄存器中的CMS位不為’00’時(shí),為中央對(duì)齊模式(所有其他的配置對(duì)OCxREF/OCx信號(hào)都有相同的作用)。根據(jù)不同的CMS位設(shè)置,比較標(biāo)志可以在計(jì)數(shù)器向上計(jì)數(shù)時(shí)被置’1’、在計(jì)數(shù)器向下計(jì)數(shù)時(shí)被置’1’、或在計(jì)數(shù)器向上和向下計(jì)數(shù)時(shí)被置’1’。TIMx_CR1寄存器中的計(jì)數(shù)方向位(DIR)由硬件更新,不要用軟件修改它。

5.PWM的一般步驟

  1. 使能定時(shí)器和相關(guān)IO口時(shí)鐘。調(diào)用函數(shù):
    RCC_APB1PeriphClockCmd()
    RCC_APB2PeriphClockCmd();

  2. 初始化IO口為復(fù)用功能輸出。調(diào)用函數(shù):GPIO_Init();

這里是要把PB5用作定時(shí)器的PWM輸出引腳,所以要重映射配置,所以需要開啟AFIO時(shí)鐘,同時(shí)設(shè)置重映射;調(diào)用函數(shù):RCC_APB2PeriphClockCmd(); GPIO_PinRemapConfig();

  1. 初始化定時(shí)器。調(diào)用函數(shù):ARR,PSC等:TIM_TimeBaseInit();

  2. 初始化輸出比較參數(shù)。調(diào)用函數(shù):TIM_OC2Init();

  3. 使能預(yù)裝載寄存器。調(diào)用函數(shù):TIM_OC2PreloadConfig();

  4. 使能定時(shí)器。調(diào)用函數(shù):TIM_Cmd();

  5. 不斷改變比較值CCRx,達(dá)到不同的占空比效果;調(diào)用函TIM_SetCompare2()

(二)STM32上的PWM

1.PWM產(chǎn)生

STM32的定時(shí)器除了TIM6和7,其他的定時(shí)器都可以用來產(chǎn)生PWM輸出。其中高級(jí)定時(shí)器TIM1和TIM8可以同時(shí)產(chǎn)生多達(dá) 7 路的 PWM 輸出。而通用定時(shí)器也能同時(shí)產(chǎn)生多達(dá) 4路的 PWM 輸出,這樣,STM32 最多可以同時(shí)產(chǎn)生 30 路 PWM 輸出。
普通IO也可以輸出PWM,只是產(chǎn)生PWM一般用轉(zhuǎn)用芯片(開關(guān)電源上用的較多)或者單片機(jī)的PWM內(nèi)置模塊如定時(shí)器,很小直接用MCU的IO口線直接輸出因?yàn)槟菢犹腗CU資源了。
脈沖寬度調(diào)制模式可以產(chǎn)生一個(gè)由TIMx_ARR寄存器確定頻率、由TIMx_CCRx寄存器確定占空比的信號(hào)。通用定時(shí)器產(chǎn)生PWM 的定時(shí)器框圖如下:(其他定時(shí)器框圖類似)
stm32f103c8t6 pwm,stm32,單片機(jī),arm

1.1PWM相關(guān)寄存器

包含三個(gè)寄存器:捕獲/比較模式寄存器(TIMx_CCMR1/2)、捕獲/比較使能寄存器(TIMx_CCER)、捕獲/比較寄存器(TIMx_CCR1~4)。設(shè)置TIMx_CCMRx寄存器OCxPE位以使能相應(yīng)的預(yù)裝載寄存器,最后還要設(shè)置TIMx_CR1寄存器的ARPE位,(在向上計(jì)數(shù)或中心對(duì)稱模式中)使能自動(dòng)重裝載的預(yù)裝載寄存器。在TIMx_CCMRx寄存器中的OCxM位寫入110(PWM模式1)或111(PWM模式2),能夠獨(dú)立地設(shè)置每個(gè)OCx輸出通道產(chǎn)生一路PWM。

捕獲/比較模式寄存器(TIMx_CCMRx)
下圖為TIMx_CCMR1寄存器的各位描述:stm32f103c8t6 pwm,stm32,單片機(jī),arm這里需要使用的是模式設(shè)置位OCxM,總共有兩種PWM模式,這兩種PWM 模式的區(qū)別就是輸出電平的極性相反。
捕獲/比較使能寄存器(TIMx_CCER)
下圖為TIMx_CCER寄存器的各位描述:
stm32f103c8t6 pwm,stm32,單片機(jī),arm
該寄存器控制著各個(gè)輸入輸出通道的開關(guān)。這里只用到了CC2E位,該位是輸入/捕獲 2 輸出使能位,要想PWM 從 I/O 口輸出,這個(gè)位必須設(shè)置為 1。
捕獲/比較寄存器(TIMx_CCRx)
下圖為TIMx_CCR1寄存器的各位描述
stm32f103c8t6 pwm,stm32,單片機(jī),arm
在輸出模式下,該寄存器的值與 CNT 的值比較,根據(jù)比較結(jié)果在OC1端口上產(chǎn)生輸出信號(hào)。利用這點(diǎn),我們通過修改這個(gè)寄存器的值實(shí)現(xiàn)控制 PWM 的輸出脈寬。

2.STM32f103c8t6的PWM口

詳細(xì)配置如下:
TIM1_CH1->PA8;
TIM1_CH2->PA9;
TIM1_CH3->PA10;
TIM1_CH4->PA11;

TIM2_CH1->PA0;
TIM2_CH2->PA1;
TIM2_CH3->PA2;
TIM2_CH4->PA3;

TIM3_CH1->PA6;
TIM3_CH2->PA7;
TIM3_CH3->PB0;
TIM3_CH4->PB1;

TIM4_CH1->PB6;
TIM4_CH1->PB7;
TIM4_CH1->PB8;
TIM4_CH1->PB9;

(三)新建工程

1.新建項(xiàng)目

步驟與上部分新建項(xiàng)目一致

2.相關(guān)設(shè)置

  1. RCC設(shè)置
    stm32f103c8t6 pwm,stm32,單片機(jī),arm

  2. SYS設(shè)置stm32f103c8t6 pwm,stm32,單片機(jī),arm

  3. TIM3設(shè)置stm32f103c8t6 pwm,stm32,單片機(jī),arm

  4. TIM4設(shè)置stm32f103c8t6 pwm,stm32,單片機(jī),arm

  5. 時(shí)鐘設(shè)置stm32f103c8t6 pwm,stm32,單片機(jī),arm

  6. 其他
    注意路徑中不要含有中文
    stm32f103c8t6 pwm,stm32,單片機(jī),arm

stm32f103c8t6 pwm,stm32,單片機(jī),arm

(四) 代碼編寫

  1. 打開工程文件
  2. main.c文件添加變量
uint16_t pwm=0;   //占空比

stm32f103c8t6 pwm,stm32,單片機(jī),arm

  1. 開啟TIM3和TIM4的PWM的通道1
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); 
    HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1); 

stm32f103c8t6 pwm,stm32,單片機(jī),arm

  1. while中寫入調(diào)用代碼
while (pwm< 500)
	  {
		  pwm++;
		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);  
    __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);  			
		  HAL_Delay(1);
	  }
	  while (pwm)
	  {
		  pwm--;
		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwm);    
       __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, pwm);  
			
		  HAL_Delay(1);
	  }
	  HAL_Delay(200);

stm32f103c8t6 pwm,stm32,單片機(jī),arm

  1. 編譯一下stm32f103c8t6 pwm,stm32,單片機(jī),arm

(五) 線路連接

3V3 —3V3

GND —GND

RXD —A9

TXD —A10

LED燈短腳 —A6

LED燈長腳 —3V3

PB6 —PC13
stm32f103c8t6 pwm,stm32,單片機(jī),arm

(六)實(shí)現(xiàn)效果

1.燒錄

stm32f103c8t6 pwm,stm32,單片機(jī),arm

2.效果展示

呼吸燈

四、總結(jié)

本文章介紹了STM32F103C8T6定時(shí)器實(shí)現(xiàn)led的周期閃爍及PWM實(shí)現(xiàn)流水燈,學(xué)習(xí)了有關(guān)定時(shí)器的知識(shí),相較上幾個(gè)實(shí)驗(yàn),這個(gè)更加簡單,當(dāng)結(jié)果出來與預(yù)期一致時(shí),也會(huì)感到欣喜,雖然比上幾個(gè)實(shí)驗(yàn)簡單,但是也包含了許多的知識(shí),受益匪淺。

五、參考資料

https://blog.csdn.net/XMJYever/article/details/105843993
https://blog.csdn.net/qq_45237293/article/details/111997424
https://blog.csdn.net/weixin_50438937/article/details/118881923
http://www.mcublog.cn/stm32/2021_01/stm32cubemx-dingshiqi-led/
《零死角玩轉(zhuǎn) STM32F103—指南者》文章來源地址http://www.zghlxwxcb.cn/news/detail-818748.html

到了這里,關(guān)于STM32F103C8T6定時(shí)器實(shí)現(xiàn)led的周期閃爍及PWM實(shí)現(xiàn)流水燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32 HAL庫 CubeMX配置 定時(shí)器學(xué)習(xí) F103C8T6

    STM32 HAL庫 CubeMX配置 定時(shí)器學(xué)習(xí) F103C8T6

    開發(fā)板: STM32F103C8T6最小系統(tǒng)板 編譯環(huán)境: Keil5 MDK 輔助軟件: STM32 CubeMX 課程教學(xué): 基于正點(diǎn)原子HAL庫學(xué)習(xí)教程 其余配件: 江科大STM32配件包?和 示波器一臺(tái) 備注: ?因?yàn)檫@塊開發(fā)板沒有基本定時(shí)器,所以本文也 沒有基本定時(shí)器的內(nèi)容 ????????????本文1.3和2.1部分的

    2024年04月26日
    瀏覽(21)
  • STM32 F103C8T6學(xué)習(xí)筆記4:時(shí)鐘樹、滴答計(jì)時(shí)器、定時(shí)器定時(shí)中斷

    STM32 F103C8T6學(xué)習(xí)筆記4:時(shí)鐘樹、滴答計(jì)時(shí)器、定時(shí)器定時(shí)中斷

    今日理解一下STM32F103 C8T6的時(shí)鐘與時(shí)鐘系統(tǒng)、滴答計(jì)時(shí)器、定時(shí)器計(jì)時(shí)中斷的配置,文章提供原理,代碼,測(cè)試工程下載。 目錄 時(shí)鐘樹與時(shí)鐘系統(tǒng): 滴答計(jì)時(shí)器: 定時(shí)器計(jì)時(shí)中斷: 測(cè)試結(jié)果: 測(cè)試工程下載: 該系統(tǒng)介紹在 STM32F10x-中文參考手冊(cè) P56頁開始 微控制器的時(shí)鐘系

    2024年02月13日
    瀏覽(32)
  • STM32F103C8T6驅(qū)動(dòng)舵機(jī)SG90 配置定時(shí)器TIM2,TIM3,TIM4的多種重映射模式下的不同IO口

    STM32F103C8T6驅(qū)動(dòng)舵機(jī)SG90 配置定時(shí)器TIM2,TIM3,TIM4的多種重映射模式下的不同IO口

    1.使用到的工具介紹 2.整個(gè)簡單介紹 3.程序的介紹 1.使用到的工具介紹: keil5,燒寫軟件FlyMcu.exe,硬件為STM32F103C8T6板,SG90舵機(jī)還有按鍵。 2.整個(gè)簡單介紹: 通過對(duì)舵機(jī)的了解我這里使用的是sg90舵機(jī)可旋轉(zhuǎn)180度,使用的芯片是stm32f103c8t6。在配置2個(gè)按鍵來進(jìn)行舵機(jī)角度加減

    2023年04月18日
    瀏覽(25)
  • STM32 F103C8T6學(xué)習(xí)筆記5:定時(shí)器輸出不同占空比PWM驅(qū)動(dòng)舵機(jī)旋轉(zhuǎn)角度

    現(xiàn)在學(xué)習(xí)使用STM32 F103C8T6的定時(shí)器PWM模式,使用PWM驅(qū)動(dòng)舵機(jī)轉(zhuǎn)動(dòng)不同角度,文章提供源碼,測(cè)試工程,測(cè)試動(dòng)態(tài)效果圖。 目錄 基礎(chǔ)原理: ?實(shí)驗(yàn)?zāi)繕?biāo): 測(cè)試視頻結(jié)果: 測(cè)試工程下載: 這次依舊拿出之前學(xué)習(xí)過的舵機(jī)DS3115,它的基礎(chǔ)原理不多加介紹,在往期講MSP432的文章有所

    2024年02月13日
    瀏覽(25)
  • 舵機(jī)控制(STM32F103C8T6)

    舵機(jī)控制(STM32F103C8T6)

    ? ? ? ? 本文是以 STM32F103C8T6 作為主控芯片,通過PB6端口輸出PWM,實(shí)現(xiàn)控制180°舵機(jī)。 (一)概述 ? ? ? ? 舵機(jī)是一種位置伺服驅(qū)動(dòng)器器,是一種帶有輸出軸的小裝置。當(dāng)我們向伺服器發(fā)送一個(gè)控制信號(hào)時(shí),輸出軸就可以轉(zhuǎn)到特定的位置。只在控制信號(hào)持續(xù)不變,伺服機(jī)構(gòu)就

    2023年04月09日
    瀏覽(25)
  • 功耗測(cè)評(píng) | STM32F103C8T6

    功耗測(cè)評(píng) | STM32F103C8T6

    STM32F103C8T6 MCU越來越廣泛的應(yīng)用在生產(chǎn)生活的各個(gè)領(lǐng)域,外接豐富的傳感器、功能模塊、通信模塊、顯示存儲(chǔ)等可以形成各種可樣的產(chǎn)品項(xiàng)目應(yīng)用。對(duì)于功耗要求比較高的產(chǎn)品,一般會(huì)選擇STM32L系列的MCU,但是從功耗的評(píng)測(cè)角度,邏輯上是基本相似的。 在很多應(yīng)用場合中都對(duì)

    2024年02月07日
    瀏覽(31)
  • STM32F103C8T6系統(tǒng)板

    STM32F103C8T6系統(tǒng)板

    1.電源部分 2.復(fù)位 3.晶振 4. 電源電路——防反接 有關(guān)二極管 漫談二極管防電源反接電路 本次采用上圖右下角的NMOS防反接電路。 電源電路——電源芯片 AMS1117是AMS公司的 ,LM1117是NS(美國國家半導(dǎo)體)的,LM1117要貴很多,所以一般的用AMS1117就可以了。 (以下分析參考STM32F10

    2024年02月02日
    瀏覽(20)
  • STM32F103C8T6板子介紹

    STM32F103C8T6板子介紹

    STM32簡介 STM32是ST公司基于ARM Cortex-M內(nèi)核開發(fā)的32位微控制器 STM32常應(yīng)用在嵌入式領(lǐng)域,如智能車、無人機(jī)、機(jī)器人、無線通信、物聯(lián)網(wǎng)、工業(yè)控制、娛樂電子產(chǎn)品等 STM32功能強(qiáng)大、性能優(yōu)異、片上資源豐富、功耗低,是一款經(jīng)典的嵌入式微控制器。 ?STM32F103C8T6 F1XX片上資源

    2024年02月11日
    瀏覽(22)
  • STM32F103C8T6串口通信

    STM32F103C8T6串口通信

    ? 首先來看一下需要操作的函數(shù),以及配置的步驟: 圖1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2?? Code: usart.c #include \\\"usart.h\\\" void ustart_Init(void ) { GPIO_InitTypeDef GPIO_Init_Ustar ; // 定義輸出端口TX的結(jié)構(gòu)體對(duì)象 USART_InitTypeDef USTART_Init; // 定義串口初始化結(jié)構(gòu)體對(duì)象

    2024年02月16日
    瀏覽(28)
  • STM32F103C8T6移植FreeRTOS

    STM32F103C8T6移植FreeRTOS

    根據(jù)自己開發(fā)板型號(hào)下載地址:STM32相關(guān)內(nèi)容下載地址 SDK直接下載地址:STM32直接下載地址 下載參考博客 FreeROTS下載地址 選用V9.0.0 版本 個(gè)人創(chuàng)建目錄如下,可做參考 keil目錄 鏈接頭文件 ? 修改堆棧大小 ? 修改中斷函數(shù)名 去掉stm32f10x_it.c終端函數(shù) 增加FreeRTOS中斷 特別解釋

    2024年02月12日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包