準備工作及前提
a、已安裝IAR或者STVD
b、下載標準固件庫(StdPeriph_Lib_V2.1.0)備用;
c、已建立好一個程序模板,如未建立請參考我的博客中的帖子STVD+STM8官方固件庫創建工程模板;
d、(非必要)已下載STM8s庫函數所在的程序版手冊;
e、(非必要)Flash Loader Demonstrator,這是ST的ISP燒寫,對于STM8只有支持BootLoader的才行,STM8SF103本身木有BootLoader,需要自己寫故而此處只是提及,但不要求,后期學習時再更新,但還是裝上較好,因為要是后期我更新了呢。
使用軟件
STVD(全稱ST Visual Develop)——編程使用;
stm8slib(使用手冊程序版) ——查找庫函數及庫函數的調用方法;
STVP(全稱ST Visual Programmer)——燒錄程序;
開始
1)模板準備工作
a、復制程序模板,并重命名文件夾為LED,這樣既保留了程序模板,又便于后期開發其他項目時不用再重新一步一步執行創建模板時的必要過程,節省時間;
b、打開STVD后,選擇File->Open Wodkspace,選中LED模板Cosmic下的Demo.stw打開即可,但還不忙寫自己所要實現的任何功能的函數;
c、為自己的主函數文件開始處添加塊注釋信息如下,完成后點擊左側方塊收起塊(如圖)注釋,方便管理和修改:
/**********************************************
** 文件名 : main.c
** 作 者 : Killer
** 創建日期 : 2017.12.16
** 版 本 : V0.1
** 功能描述 : ANSI C.主函數調用其他函數實驗點
** 亮LED或者熄滅LED.
**********************************************/
d、編譯模板,沒有錯誤時,開始添加自己要實現的功能代碼。
2)功能實現
3.2.1、理清點亮LED邏輯思路
a、LED的亮滅是由LED所在GPIO端口引腳輸出高低電平來實現;
b、根據電路接法選擇GPIO端口、或者引腳工作模式、電平翻轉速率;
c、(非必要)可以在初始化端口前將對應GPIO端口寄存器恢復到默認值。
注意:此處端口是指如GPIOA、GPIOB等,由8位(或者說8個引腳)組成,如51單片機的P0、P1等;而GPIO端口引腳、GPIO引腳、引腳則是這些端口的某一個引腳,如51單片機的P0.0,P1.1等,此處可以理解為GPIOA.0 GPIOB.2等;
3.2.2、根據思路在stm8s_gpio.c文件中查找響應函數
a、經查看文件可將對應高低電平輸出到引腳的函數原型如下:
void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal);
void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
參數解釋如下:
GPIO_TypeDef* GPIOx:端口類型參數為GPIOA、GPIOB等具體端口;
uint8_t PortVal:8位二進制組成的一個端口值,每一位操作一個引腳;
GPIO_Pin_TypeDef PortPins:引腳類型數據,具體為GPIO_Pin_0~GPIO_Pin_7,神奇的是庫函數還讓你一次性操作高四位或者第四位參數為GPIO_PIN_LNIB(低四位),GPIO_PIN_HNIB(高四位),全部8位就是GPIO_PIN_ALL。
3.2.3、初始化LED所在引腳
繼續查找stm8s_gpio.c,并找到類似Init字樣即可,其中Init是Initialize的縮寫。
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);
其中第一個為恢復到默認值(De【fault】)的初始化;第二個則是對應引腳的初始化;
3.2.4、使用程序辦庫函數使用手冊配置GPIO引腳
a、運行
b、選擇庫函數功能及配置
圖中手繪步驟數字描述:
1步:選擇對應功能的庫函數;
2~4步:選擇該庫函數的對應參數,例如本函數GPIO_Init:
第一個參數為步驟2的LED所在端口;
第二個參數為步驟3的對應LED在端口中所在引腳;
第三個參數為該引腳工作模式選擇;
5步,將所選參數生成代碼;
6步:將生成的代碼剪切至系統剪貼板,在STVD或其他IDE中粘貼即可。
總體代碼實現
總結
對于GPIO操作時須有如下步驟,即使是STM32、STC15等單片機,不論是庫函數還是寄存器亦是如此:
1、初始化端口
2、初始化所在引腳并設置翻轉速度、工作模式,如:開漏/推挽、輸入/輸出;
3、對端口或者指定引腳寫入數據;
上一篇:STM8L051x SPI Master
下一篇:STM8L051 調試體會
推薦閱讀
史海拾趣
除了工業檢測儀表外,Hama在家用視聽設備領域也取得了顯著成就。公司推出的哈曼卡頓音響系列,以其卓越的音質表現和時尚的外觀設計,迅速成為消費者心中的首選品牌。這些家用視聽設備不僅為消費者帶來了高品質的視聽享受,也進一步豐富了Hama的產品線,提升了公司的市場競爭力。隨著消費者對高品質生活的追求日益增強,Hama的家用視聽設備業務有望繼續保持快速增長。
在發展過程中,如韻始終關注社會責任和可持續發展問題。公司積極參與社會公益活動,為弱勢群體提供幫助和支持。同時,如韻注重環保和節能減排工作,在產品設計和生產過程中嚴格遵守相關環保法規和標準。
為了推動行業的可持續發展,如韻還積極參與行業交流和合作活動,與同行分享經驗和資源。通過與產業鏈上下游企業的緊密合作和協同創新,如韻為推動電子行業的綠色發展和技術進步做出了積極貢獻。
隨著市場需求的不斷變化,如韻意識到技術創新是企業持續發展的關鍵。因此,公司投入大量資源進行產品研發和技術升級。其中,一次重要的技術突破讓如韻在行業內聲名鵲起。
當時,市場上的某種電子元器件存在性能不穩定的問題,給許多電子設備制造商帶來了困擾。如韻的研發團隊經過深入研究,成功開發出了一種新型電子元器件,不僅性能穩定可靠,而且成本更低。這一創新產品迅速占領了市場份額,成為公司的明星產品,也為如韻帶來了豐厚的經濟回報。
DLP科技,一家以DLP技術為核心的創新設計公司,在電子行業的快速發展中嶄露頭角。公司創始人李博士,憑借對DLP技術的深入研究和獨到見解,帶領團隊開發出了一系列具有革命性的產品。從最初的DLP投影機到后來的無屏電視,DLP科技不斷突破技術瓶頸,引領市場潮流。通過持續的創新和研發,DLP科技在電子行業樹立了技術領先的地位。
Econais的超低功耗Wi-Fi模塊在醫療保健領域取得了廣泛的應用。通過連接醫療設備,如監護儀、血糖儀等,這些模塊實現了患者數據的實時傳輸和監控,提高了醫療服務的效率和質量。同時,Econais還針對醫療保健領域的特點,提供了定制化的軟件開發工具包(SDK),幫助客戶快速開發符合行業標準的物聯網應用。
Econais的超低功耗Wi-Fi模塊在醫療保健領域取得了廣泛的應用。通過連接醫療設備,如監護儀、血糖儀等,這些模塊實現了患者數據的實時傳輸和監控,提高了醫療服務的效率和質量。同時,Econais還針對醫療保健領域的特點,提供了定制化的軟件開發工具包(SDK),幫助客戶快速開發符合行業標準的物聯網應用。
為何調用PsTerminateSystemThread不能結束創建的線程? 我在驅動程序的DriverEntry里創建一個線程,用來讀取文件。 但是在線程函數里讀取文件完畢后用PsTerminateSystemThread結束線程,但是我發現線程并沒有被關閉,仍然在不斷地進入線程函數。請問該如何結束線程? 部分代碼如下: VOID CreateLoadP ...… 查看全部問答∨ |
本人下載TCPMP開源代碼后,單獨編譯ffmpeg,發現以下錯誤,請高手指教如何處理 1>ffmpeg.obj : error LNK2019: unresolved external symbol __imp_BufferClear referenced in function UpdateInput 1>ffmpeg.obj : error LNK2019: unresolved ...… 查看全部問答∨ |
我用2410開發板安裝sharp的8寸液晶屏,燒好wince的內核后,屏幕的內容顯示還比較正常,但是整個屏幕向左偏移了1cm左右,即左邊有一段無法顯示,右邊有一段黑屏無顯示,請問驅動的哪個參數設置有問題?… 查看全部問答∨ |
|
9月初的(成都)電子展的規模據說近五百家,我們的兩個主要的競爭對手都第一次參加了,我們老大想參加,但實際上我們目前在西南的客戶很少。不太了解那邊的狀況(我們公司提供電子生產制造中用的一種高精度測試設備,目前的主要客戶在沿海地區)。 ...… 查看全部問答∨ |
|
學習 STM32 無非兩個方面, 1. 軟件 例如是IAR CM3 軟件編寫程序2。 硬件,STM32和CM3核而且 軟件 中已經 描述、表達了 硬件!這就是  ...… 查看全部問答∨ |
1 最高波特率是多少?手冊上說:1.5.2 Maximum baud rateBHigh is the highest baud rate for which the deviation still does not exceed the&n ...… 查看全部問答∨ |
LedReg (*((volatile Uint16 *)0x41FF))是什么意思,其中0x41FF是怎么找到的 以下是他的主程序,這里的0x41FF指向誰?如何才能找到這地址?是CMD文件嗎?初學者求助,謝謝 #define LedReg (*((volatile Uint16 *)0x41FF)) Uint16 &nbs ...… 查看全部問答∨ |
最開始的時候是手冊看的沒感覺,就去看代碼(發現更沒感覺),主要是寄存器定義不清楚,后來對著User Guide看代碼就輕松很多。 后來是要用到某個模塊,就圖簡單,從范例里面把設置代碼抄過來?!? 查看全部問答∨ |