STM8 微控制器除錯筆記

2021-08-21 10:48:57 字數 2211 閱讀 9879

1、休眠喚醒後串列埠異常問題

stm8l主要用來做低功耗產品,這裡就有休眠前跟喚醒後有差異的情況,在除錯的時候碰到如果使用串列埠,在休眠前都正常,當喚醒後,串列埠傳送的資料會出現異常的情況,傳送的資料感覺會有丟幀。後來發現跟系統時鐘有關,如果系統時鐘採用外部時鐘就會有問題,內部時鐘就ok。

/*這裡要用內部時鐘

用外部時鐘在進入halt之後會出現

串列埠傳送異常

*/clk_hsicmd(enable);

while (clk_getflagstatus(clk_flag_hsirdy) == reset);

clk_sysclksourceconfig(clk_sysclksource_hsi);

clk_sysclkdivconfig(clk_sysclkdiv_1);

2、rtc喚醒設定問題

如果要做低功耗,主要是通過rtc來喚醒,這樣cpu能進入最低休眠。設定rtc也碰到乙個奇怪問題,設定喚醒計數器一定要在開中斷之前,不然設定會無效。

clk_peripheralclockconfig(clk_peripheral_rtc, enable);

clk_rtcclockconfig(clk_rtcclksource_lsi, clk_rtcclkdiv_1);

rtc_wakeupclockconfig(rtc_wakeupclock_rtcclk_div16); //38000/16  = 2048

rtc_setwakeupcounter(2375* g_rtcctl.u32wakeint); //這個要放在開中斷前

rtc_itconfig(rtc_it_wut, enable);

rtc_wakeupcmd(enable);

3、adc多通道切換問題

我程式要用到兩個採集,乙個用來做io口的ad採集,乙個用來內部參考電壓做電源電量採集,這裡碰到乙個奇葩問題,如果你在切換通道的時候,第一次採集的資料就是不對,需要第二次採集的資料才行。

smoke_det_pwr_en();

//adc_deinit(adc1);

clk_peripheralclockconfig(clk_peripheral_adc1, enable);

adc_init(adc1, adc_conversionmode_single, adc_resolution_12bit, adc_prescaler_1);

adc_samplingtimeconfig(adc1, adc_group_slowchannels, adc_samplingtime_384cycles);

adc_cmd(adc1, enable);

adc_channelcmd(adc1, adc_channel_4, enable);

t_u32 u32delay = 100;

while(u32delay--);

for(u8i = 0; u8i < 2; u8i++)

smoke_det_pwr_di();

adc_channelcmd(adc1, adc_channel_4, disable);

adc_cmd(adc1, disable);

clk_peripheralclockconfig(clk_peripheral_adc1, disable);

clk_peripheralclockconfig(clk_peripheral_adc1, enable);

adc_init(adc1, adc_conversionmode_single, adc_resolution_12bit, adc_prescaler_1);

adc_vrefintcmd(enable);

adc_cmd(adc1, enable);

adc_channelcmd(adc1, adc_channel_vrefint, enable);

t_u32 u32delay = 100;

while(u32delay--);

for(u8i = 0; u8i < 2; u8i++)

adc_cmd(adc1, disable);

adc_channelcmd(adc1, adc_channel_vrefint, disable);

4、低頻時鐘問題

stm8l內部的低頻是38khz,不是32768

STM8 系列微控制器命名規則

stm8 命名規則示列 stm8s005k6t6c 代表的意義為 超值型 stm8 核心 可以理解為8 位51 增強型核心 mcu,lqfp 32 封 裝,32kb flash 容量,溫度範圍 40 85 工業級 具體分解如下 stm8 微控制器包括以下幾個系列 stm8 8 位mcu stm8a ...

stm8觸控按鍵除錯筆記 1

預設狀態下觸控按鍵所有鍵的靈敏度是一樣的,但是實際應用不是這樣的。各個鍵都有可能不一樣。實現不同靈敏度的方法如下 tsl sckey init 函式裡面初始化了靈敏度 pkeystruct detectthreshold sckey detectthreshold default 我們增加乙個陣列,...

STM8微控制器時鐘

時鐘樹 時鐘源有四種 外部高速晶振 hse 1 16mhz 內部高速rc振盪器 hsi 16mhz 外部低速晶振 lse 32.768 內部低速rc振盪器 lsi 38khz 系統預設配置的時鐘為hsi的8分頻既2mhz 外部時鐘配置hse clk deinit 復位所有時鐘暫存器 clk hsic...