這幾天一直糾結(jié)于使用STM8庫(kù)還是用底層寄存器寫程序,用了用IAR和庫(kù)的搭配,方便時(shí)肯定的,但是呢,鑒于我現(xiàn)在工作使用的就是STM32的單片機(jī)+STM32庫(kù),考慮再三,我還是用底層吧,這樣兩個(gè)就可以互補(bǔ)了,既不會(huì)太依賴于庫(kù),又對(duì)寄存器的操作有更深的了解。。只是都是相通的,是的,相通的。。 以下是從技術(shù)手冊(cè)上粘貼的:
本文引用地址:http://2s4d.com/article/201611/320889.htm TIM1由一個(gè)16位的自動(dòng)裝載計(jì)數(shù)器組成,它由一個(gè)可編程的預(yù)分頻器驅(qū)動(dòng)。
本章中使用i來(lái)代表1、2、3、4,分別對(duì)應(yīng)于四個(gè)不同的捕獲/比較通道。
高級(jí)控制定時(shí)器適用于許多不同的用途:
●基本的定時(shí)
●測(cè)量輸入信號(hào)的脈沖寬度(輸入捕獲)
●產(chǎn)生輸出波形(輸出比較,PWM和單脈沖模式)
●對(duì)應(yīng)與不同事件(捕獲,比較,溢出,剎車,觸發(fā))的中斷
●與TIM5/TIM6或者外部信號(hào)(外部時(shí)鐘,復(fù)位信號(hào),觸發(fā)和使能信號(hào))同步
高級(jí)控制定時(shí)器廣泛的適用于各種控制應(yīng)用中,包括那些需要中間對(duì)齊模式PWM的應(yīng)用,該模式支持互補(bǔ)輸出和死區(qū)時(shí)間控制。
高級(jí)控制定時(shí)器的時(shí)鐘源可以是內(nèi)部時(shí)鐘,也可以是外部的信號(hào),可以通過(guò)配置寄存器來(lái)進(jìn)行選擇。
這個(gè)定時(shí)器對(duì)我的第一印象就是想到STM32的定時(shí)器1,也是高級(jí)定時(shí)器,記得當(dāng)初用32的某個(gè)單片機(jī)做的項(xiàng)目,要出各種互補(bǔ)對(duì)稱的脈沖,而且還必須多少多少的死區(qū)時(shí)間。。雖然很頭疼,但是還是用定時(shí)器1輕松實(shí)現(xiàn)。看似這個(gè)定時(shí)器和STM32的高級(jí)定時(shí)器差不多,那就肯定很強(qiáng)大。。
//Time1定時(shí)器
void Timer1Init(void)
{
asm("sim"); // 關(guān)全局中斷
TIM1_PSCRH=0;
TIM1_PSCRL=15; //(fCK_CNT)等于fCK_PSC/( PSCR[15:0]+1)。
TIM1_CNTRH=0xc3;
TIM1_CNTRL=0x50;//自動(dòng)裝載寄存器的值
TIM1_IER=0x01;//允許更新中斷
TIM1_RCR=20;//重復(fù)計(jì)數(shù)寄存器值
TIM1_CR1=0x01;//打開自動(dòng)裝載,打開計(jì)數(shù)器
asm("rim"); // 開全局中斷
}
以上是定時(shí)器的初始化,第一句不解釋。TIM1_PSCRH TIM1_PSCRL為單片機(jī)的預(yù)分頻器。和STM32差不多。取值貌似都是u16. 然后是TIM1_ARRH TIM1_ARRL,自動(dòng)裝在寄存器的值,也就是說(shuō),一旦計(jì)數(shù)到65535,寄存器溢出并觸發(fā)中斷,然后定時(shí)器的計(jì)數(shù)器自動(dòng)裝載為此值。。原來(lái)是這樣,呵呵,所有單片機(jī)都一樣。。允許更新中斷,定時(shí)時(shí)間到進(jìn)中斷,地球人都知道。。重復(fù)計(jì)數(shù)器很好,他需要溢出N次才可以進(jìn)中斷。。呵呵。。開自動(dòng)裝載,開定時(shí)器。差不多就OK了。。但是哥那個(gè)晚上調(diào)了N長(zhǎng)時(shí)間都沒(méi)調(diào)通,郁悶的要死,最后的最后的最后,終于找到了,asm("sim"); // 關(guān)全局中斷 asm("rim"); // 開全局中斷。。哥突然想起當(dāng)初的51.。不解釋。。
中斷函數(shù)也粘過(guò)來(lái)吧、、、
#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_OVF_IRQHandler(void)
{
static unsigned char i;
if(TIM1_SR1&0x01)
{
TIM1_SR1&=~0x01;//清除中斷標(biāo)志
i++;
if(i%2) PD_ODR=0x00;
else PD_ODR=0xff;
}
}
看到這個(gè)日志的同志們就偷笑吧,這個(gè)代碼復(fù)制粘貼,肯定能用。。
評(píng)論