一、使用定時器tim2的ch1、ch2、ch3通道pwm輸出
1. 在使用stm8s系列的微控制器的時候,使用的標頭檔案大部分都是通用的stm8s.,第一步修改標頭檔案:
/* #define stm8s208 */ /*!< stm8s high density devices with can */
/* #define stm8s207 */ /*!< stm8s high density devices without can */
/* #define stm8af52ax */ /*!< stm8a high density devices with can */
/* #define stm8af62ax */ /*!< stm8a high density devices without can */
/* #define stm8s105 */ /*!< stm8s medium density devices */
/* #define stm8af626x */ /*!< stm8a medium density devices */
#define stm8s103 /*!< stm8s low density devices */
/* #define stm8s903 */ /*!< stm8s low density devices */
2. 取消stm8s103的注釋,103和003的暫存器位址都是一樣的,所以我們這裡用103替代003.
3. 引腳使用pwm功能時無需配置gpio狀態,直接配置暫存器即可。例如tim2的庫函式配置如下:
tim2_timebaseinit(tim2_prescaler_1, 7999); /* 1分頻 ,計數值8000,頻率=16m/8000=2khz */
/* pwm1 mode configuration: channel1 */
tim2 channel1 duty cycle = [tim2_ccr1/(tim2_arr + 1)] * 100 = 50%*/
tim2_oc1init(tim2_ocmode_pwm1, tim2_outputstate_enable,2000, tim2_ocpolarity_high);
tim2_oc1preloadconfig(enable);
/* pwm2 mode configuration: channel2 */
tim2_oc2init(tim2_ocmode_pwm2, tim2_outputstate_enable,2000, tim2_ocpolarity_high);
tim2_oc2preloadconfig(enable);
/* pwm3 mode configuration: channel3*/
tim2_oc3init(tim2_ocmode_pwm2, tim2_outputstate_enable,2000, tim2_ocpolarity_high);
tim2_oc3preloadconfig(enable);
tim2_cmd(enable);
4. 配置完成後,除錯輸出2khz 占空比為25%的pwm波,如下圖所示:
5. 因為tim2的這3個pwm通道都沒有用到alternative功能,不需要配置options bytes。
二、使用定時器tim1的ch1、ch2、ch3通道的pwm功能
1. tim1的ch1、ch2為需要配置的引腳復用功能,在除錯程式之前,需要配置option bytes。afr0設定為alternate active.
2. tim1三通道輸出pwm暫存器例項:
clk->ckdivr= 0x00; //內部16m時鐘不分頻
tim2->pscr = 0x00; //定時器2預分頻係數為1
tim2->cr1 = 0x01; //內部計數器使能;
tim2->arrh = 0x00;//0140,320分頻,16m/320=50k,實測49.75k
tim2->arrl = 0x8a;//自動裝載暫存器低位;實測013e正好為50.0k
/*pwm通道1設定*/
tim2->ccer1 |= 0x01; //開啟oc1訊號輸出腳
tim2->ccmr1 = 0x60; //pwm1模式
tim2->ccr1h = 0x00; //占空比高位
tim2->ccr1l = 0x37; //占空比低位
tim2->ccmr1 |= 0x08; //輸出比較1預裝載使能
/*pwm通道2設定*/
tim2->ccer1 |= 0x10; //開啟oc2訊號輸出腳
tim2->ccmr2 = 0x60; //pwm1模式
tim2->ccr2h = 0x00; //占空比高位
tim2->ccr2l = 0x37; //占空比低位
tim2->ccmr2 |= 0x08; //輸出比較2預裝載使能
/*pwm通道3設定*/
tim2->ccer2 |= 0x01; //開啟oc3訊號輸出腳
tim2->ccmr3 = 0x60; //pwm1模式
tim2->ccr3h = 0x00; //占空比高位
tim2->ccr3l = 0x37; //占空比低位
tim2->ccmr3 |= 0x08; //輸出比較3預裝載使能
tim2->cr1 |= 0x01;
stm8s003使用心得 時鐘(CLK)
本文介紹stm8s003mcu的時鐘 clk 前幾天直接使用官方的庫開發的程式,直接利用了庫函式進行的時鐘及timer的配置,其中有一些不太明白的地方,今天又仔細看了datasheet,有了更多的了解。由於產品要控制成本,我選擇使用的是mcu的內部時鐘hsi 16mhz rc。通過下圖1,可以更直觀...
STM8S003 上公升沿進不去外部中斷問題
硬體配置中為雙邊沿觸發 問題 下降沿觸發部分程式可以執行,上公升沿進不去。測試結果 上公升沿可以進入中斷,但是判斷語句不滿足條件。if gpio readinputpin led1 port,led1 pin 1 下降沿觸發中斷 條件函式為 bitstatus gpio readinputpin g...
STM32的定時器的使用
一,基本定時器的使用 定時1s的時間led翻轉一次 需要設定的關鍵的引數 1,分頻係數 如果主頻是72m,那麼一般設定72 那麼沒1 71m 時間就累加一次 2,自動重裝載暫存器的值 這裡設定1000 那麼更新中斷的頻率就是 1000hz,中斷週期就是1ms 二,高階定時器的輸入捕捉 高階定時器 捕...