<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

STM8 PWM例程

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò ) 收藏
單片機應用系統中,也常常會(huì )用到PWM 信號輸出,例如電機轉速的控制?,F在很多高檔的單片機

也都集成了PWM 功能模塊,方便用戶(hù)的應用。
對于PWM 信號,主要涉及到兩個(gè)概念,一個(gè)就是PWM 信號的周期或頻率,另一個(gè)就是PWM 信號的
占空比。例如一個(gè)頻率為1KHZ,占空比為30%,有效信號為1 的PWM 信號,在用示波器測量時(shí),
就是高電平的時(shí)間為300uS,低電平的時(shí)間為700uS 的周期波形。
在單片機中實(shí)現PWM 信號的功能模塊,實(shí)際上就是帶比較器的計數器模塊。首先該計數器循環(huán)計數,
例如從0 到N,那么這個(gè)N 就決定了PWM 的周期,PWM 周期=(N+1)*計數器時(shí)鐘的周期。在計數
器模塊中一定還有一個(gè)比較器,比較器有2 個(gè)輸入,一個(gè)就是計數器的當前值,另一個(gè)是可以設置的
數,這個(gè)數來(lái)自一個(gè)比較寄存器。當計數器的值小于比較寄存器的值時(shí),輸出為1(可以設置為0),
當計數器的值大于或等于比較寄存器的值時(shí),輸出為0(也可設置為1,與前面對應)。
了解了這個(gè)基本原理后,我們就可以使用STM8 單片機中的PWM 模塊了。下面的實(shí)驗程序首先將定
時(shí)器2 的通道2 設置成PWM 輸出方式,然后通過(guò)設置自動(dòng)裝載寄存器TIM2_CCR2,決定PWM 信號
的周期。在程序的主循環(huán)中,循環(huán)修改占空比,先是從0 逐漸遞增到128,然后再從128 遞減到0。
當把下面的程序在ST 的三合一板上運行時(shí),可以看到發(fā)光二極管LD1 逐漸變亮,然后又逐漸變暗,
就這樣循環(huán)往復。如果用示波器看,可以看到驅動(dòng)LD1 的信號波形的占空比從0 變到50%,然后又從
50%變到0。
同樣還是利用ST 的開(kāi)發(fā)工具,生成一個(gè)C 語(yǔ)言程序的框架,然后修改其中的main.c,修改后的代碼
如下。
// 程序描述:用PWM 輸出驅動(dòng)LED
#include "STM8S207C_S.h"
void CLK_Init(void);
void TIM_Init(void);
// 函數功能:延時(shí)函數
// 輸入參數:ms -- 要延時(shí)的毫秒數,這里假設CPU 的主頻為2MHZ
// 輸出參數:無(wú)
// 返回值:無(wú)
// 備注:無(wú)
void DelayMS(unsigned int ms)
{
unsigned char i;
while(ms != 0)
{
for(i=0;i<250;i++);
for(i=0;i<75;i++);
ms--;
}
}

本文引用地址:http://dyxdggzs.com/article/201611/321401.htm

// 函數功能:初始化時(shí)鐘
// 輸入參數:無(wú)
// 輸出參數:無(wú)
// 返回值:無(wú)
// 備注:無(wú)
void CLK_Init()
{
CLK_CKDIVR = 0x11; // 10: fHSI = fHSI RC output/ 4
// = 16MHZ / 4 =4MHZ
// 001: fCPU=fMASTER/2. = 2MHZ
}
// 函數功能:初始化定時(shí)器2 的通道2,用于控制LED 的亮度
// 輸入參數:無(wú)
// 輸出參數:無(wú)
// 返回值:無(wú)
// 備注:無(wú)
void TIM_Init()
{
TIM2_CCMR2 = TIM2_CCMR2 | 0x70;// Output mode PWM2.
// 通道2 被設置成比較輸出方式
// OC2M = 111,為PWM 模式2,
// 向上計數時(shí),若計數器小于比較值,為無(wú)效電平
// 即當計數器在0 到比較值時(shí),輸出為1,否則為0
TIM2_CCER1 = TIM2_CCER1 | 0x30;// CC polarity low,enable PWM output */
// CC2P = 1,低電平為有效電平
// CC2E = 1,開(kāi)啟輸出引腳
//初始化自動(dòng)裝載寄存器,決定PWM 方波的頻率,Fpwm=4000000/256=15625HZ
TIM2_ARRH = 0;
TIM2_ARRL = 0xFF;
//初始化比較寄存器,決定PWM 方波的占空比
TIM2_CCR2H = 0;
TIM2_CCR2L = 0;
// 初始化時(shí)鐘分頻器為1,即計數器的時(shí)鐘頻率為Fmaster=4MHZ
TIM2_PSCR = 0;
// 啟動(dòng)計數
TIM2_CR1 = TIM2_CR1 | 0x01;
}
main()
{
unsigned char i;
CLK_Init(); // 初始化時(shí)鐘
TIM_Init(); // 初始化定時(shí)器
while(1) // 進(jìn)入無(wú)限循環(huán)
{
// 下面的循環(huán)將占空比逐漸從0 遞增到50%
for(i=0;i<128;i++)
{
TIM2_CCR2H = 0;
TIM2_CCR2L = i;
DelayMS(5);
}
// 下面的循環(huán)將占空比逐漸從50%遞減到0
for(i=128;i>0;i--)
{
TIM2_CCR2H = 0;
TIM2_CCR2L = i;
DelayMS(5);
}
}
}



關(guān)鍵詞: STM8PWM例

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>