今天檢視stm32資料時,對輸出速度2m 10m 50m不是很了解,再加上移植arf2496k程式到stm32時出現意外情況。
一、stm8s端作為接收端和傳送端時接收到的資料都正常。
二、傳送端(stm8s),接收端(stm32)這時也正常。
三、傳送端(stm32),接收端(stm8)時,接收到的就是錯誤資料,資料每次都相同,但是是錯的。
於是,便考慮是不是stm32 i/o輸出速度太快導致的,今天便拿示波器測試,果然,豁然開朗。
網上很多全他媽瞎說,stm32的i/o輸出配置成2mhz 10mhz 50mhz根本就不是所謂的輸出速度,僅僅是翻轉速度。
測試示波器為 rigol ds1062ca,探頭為10x,通道二進行捕獲。
硬體: stm32f107主控,採用神舟iv開發板。 另外stm8s主控,採用stm8s核心板
軟體: 分為使用庫函式和非庫函式兩種。
一、 使用庫函式做輸出:
int main()
#endif
}void init_pd11()
示波器波形圖如下:
實測,無論 gpio_speed初始成多少,都是這個波形。也就是說輸出速度就這麼點了(2.25mhz),跟所謂的2m,10m,50m沒什麼關係。
上公升沿時間與下降沿時間相比要長。
二、直接操作暫存器
只是改動while(1)迴圈中的**,如下:
while(1)
示波器波形如下:
實測,2m 10m 50m輸出都是這個波形,但速度明顯提公升3.5倍,由此可見庫函式效率低下。 按手冊所講應該的翻轉速度最大為18mhz,不知道什麼原因,我這裡只能測試出8mhz速度。
同樣,上公升的時間比下降的時間長。
stm8s測試部分
這裡測試時,增加了一部分內容,stm8s 4分頻後測試和 stm8s 不分頻測試。 使用內部16mhz rc 振盪器。
第一種情況,4mhz主頻進行測試
一、 使用庫函式,**如下:
main()
}
示波器波形如下:
這裡上公升時間與下降時間差距並不怎麼明顯。
二、操作暫存器控制輸出
**改動如下:
while(1)
示波器波形如下:
這裡能清晰看出上公升與下降的時間差別,而且速度也快了8倍,其實這些時間只是耗費在了函式呼叫與返回上。
第二種情況,16mhz主頻進行測試。
這裡就不再測庫函式的io速度了,除去函式呼叫,內部**就是一致的。
直接操作暫存器控制輸出,示波器波形如下:
挺給力,竟然能達到3.2mhz。
總結:
stm32 裡面的輸出速度不是i/o翻轉速度,本人測試速度僅為8mhz
stm32的庫函式效率比較猥瑣。
之前接收端與傳送端都採用stm8s的情況下,將頻率分頻為4mhz下,通訊是正常的,嘗試過將傳送端頻率不分頻,使用其16mhz,現象和我在stm32裡面的一致。
能進行正常通訊的情況下,i/o口速率為95.8khz,當時並沒有採用直接操作暫存器的方式。現在發現,原來stm8s 16mhz主頻下i/o速度竟然達到了3.2mhz,stm32作為傳送端,自然i/o口速度最小都有2.2mhz, 很有可能是因為這個速度太快,而arf2496k的速度跟不上導致的,至於為什麼,暫時還沒有能力進行**。
STM8S時鐘配置
1 stm8時鐘說明 stm8上電復位後預設使用內部的高速時鐘,並分頻成為2m用於系統執行。如果我們想要使用外部時鐘,需要進行時鐘切換,切換過程中還需要使用stvp進行晶元選項字的更改。2 stm8s時鐘配置 庫函式版 1 配置內部高速振盪器 hsi 的分頻器 1分頻 clk hsiprescale...
STM8S 操作內部EEPROM
對於stm8s103f3這款晶元來講,存在640個位元組的eeprom,當然如果有外部eeprom,自然是不會使用到內部的eeprom的。但小東西也有大用途,例如做無線應用時,減少成本的情況下,還能儲存一些特定設定,如 休眠時間,工作頻率,輸出功率,密碼等。下圖所示,stm8s系列eeprom大小一...
STM8S低功耗處理
要低功耗設計,主要考慮幾個方面 1.外設的低功耗,不需要的外設模組,全部關閉。2.gpio的處理,不需要的io最好做懸浮輸入處理。3.主時鐘的處理,先降到最低內部lsi時鐘,關閉其他不需要的時鐘模組。4.進入低功耗模式。除了執行模式,可以採用以下三種低功耗模式 等待 主動停機 停機。1 等待 wai...