買了一塊STM32的板子,這次需要將IR的code移植到STM32上面,因為STM32成本比樹莓派低得多,所以
一些簡單的外設掛在STM32上就行了。
我買的板子的型號是STM32F103C8T6,價格還是挺便宜的。另外,紅外模塊采樣自己搭建的模塊,可以自己控制距離,在上一篇博文中有所提到。先來一張圖:
既然已經有了成功的案例,只要將之前的代碼移植過來就行了。底層的實現有兩個不一樣,一個是時鍾,另一個是PWM。對於時鍾來說,delay.c里面有實現的源碼,通過配置SysTick來實現延時。這里通過查詢的方式來查詢是否到了目標的時間,為了后續多個外設的運行,可以考慮將其改成TIM中斷來實現。
對於PWM來說,需要調用到PWMx或者PWM1,因為STM32中PWM的原理比較復雜,所以先使用
現成的code來實現,這里采用了(http://blog.sina.com.cn/s/blog_49cb42490100s6uh.html) 的代碼
實現,並且刪除了無用的code。因為TIM的輸入時鍾為72M/2*2 = 72M,所以是足夠產生38K PWM的。
跟樹莓派一樣,這里使用的示例代碼也有相應的延遲,為十多個us。不過可以通過補償來實現。
開的時候加入13us,關的時候加入15us。
相應的代碼已傳到github上:
https://github.com/tanhangbo/stm32_iot
入口代碼為 test.c