一、前言
您在使用新款芯片和新的開發環境進行開發的過程中是否會遇到以下問題:如何快速建工程?如何快速上手編程?不了解芯片功能?實現功能和預期不符?
本開發指南將手把手幫工程師們解決以上問題,了解芯片的各個模塊,對照手冊熟悉各個模塊的寄存器配置。同時,分享一些常見的錯誤用法,避免您走一些彎路,從而提高開發效率。
二、程序描述
示例程序是以SD93F115-JBS芯片編寫,包含了按鍵中斷、RTC中斷、SDADC、SARADC、RTC、DAC、低壓檢測、LCD顯示、休眠測試等多個基礎功能綜合的一個程序,配合按鍵中斷進入不同的子程序進行演示。
附件SD93F115-JBS_TEST是已經編寫好的示例程序,其主體思路:先對芯片進行系統初始化,再對需要使用的功能進行配置,然后進入主循環通過按鍵中斷選擇置起相應的測試標志位,進入相應的測試項實現功能演示。
最后按照《軟件篇》的方法將程序下載至芯片中。
三、main函數
main函數的整體框架,如圖3-1:
圖3-1 main函數
如上圖所示,main函數首先運行的是Sys_MyInit()系統初始化,因為芯片上電后的默認狀態下基本只有IHRC和ILRC在工作,大部分的外設都需要打開對應時鐘后,才可以重新配置相應模塊,后期自行開發時有需要用到的外設可參照應用手冊13.7節--時鐘與復位寄存器優先開啟時鐘。
由于IHRC是校準過的,只需從RCC_IHRC_CLBR寄存器將校準數據存入RCC_IHRC_CR寄存器即可完成校準動作,模擬部分電源BG、ACM和AVDDR默認上電是關閉的,后續也會用到,直接調用庫函數打開,完成對芯片的初步配置。如下圖3-2所示:
圖3-2系統初始化函數
系統初始化之后,進行FLAG_Init()標志位初始化,該函數里的標志位是自定義的一些變量,在后續程序執行時會使用到,而在初始運行函數時,這些變量可能是隨機數據,需要進行變量清零。如下圖3-3所示:
圖3-3自定義標志位初始化函數
自定義標志位初始化之后,為保證程序運行正常,在編寫其他函數前,需要先編寫一個IWDG_Init()獨立看門狗初始化函數(脫離主函數單獨計數的一個寄存器,屬于硬件范疇),它能在程序跑飛的情況下,復位芯片,使程序重新開始運行。獨立看門狗結構圖如下圖3-4:
圖3-4獨立看門狗結構圖
從結構上看,獨立看門狗是以低頻時鐘ILRC的分頻為時鐘源,當WDT_COUNTER計數時間超過設置值時溢出,芯片便會產生中斷或復位,注意一旦獨立看門狗使能后軟件就無法關閉IWDG和ILRC,除非產生復位。
獨立看門狗初始化函數如圖3-5所示:
圖3-5獨立看門狗初始化函數
這里直接調用庫函數,將獨立看門狗預分頻器設置8分頻,溢出時間設置為23040,最后開啟看門狗選擇正常模式工作,待機模式不工作,在此配置下計算的復位時間t=5.76秒。
因為開啟了獨立看門狗,但又不希望程序在正常運行時發生復位,所以需要在正常運行的程序期間加入‘喂狗’操作,防止芯片在正常情況下復位,尤其是在執行循環過程中是需要特別注意進行‘喂狗’操作的,建議溢出時間不要設的太小。
獨立看門狗初始化后,還對按鍵中斷、PWM、SDADC、SARADC、UART、RTC和LCD顯示等功能也進行了初始化,在后面的章節會詳細介紹。
為了更直觀的看到程序是否正常運行,先在LCD屏上顯示‘123456’,然后用一個GPIO做數字輸出來驅動外部LED燈進行閃爍,GPIO初始化如下圖3-6:
圖3-6 GPIO初始化函數
首先打開GPIO外設時鐘使能,將P83口設置為數字輸出,配置為大電流模式(最大電流可以達到12mA),為避免其他GPIO引腳懸空造成未知影響,將所有沒有使用的GPIO全部配置為輸入上拉模式。
宏定義了P83引腳的輸出,使得控制LED燈的狀態更清楚,然后在main函數的while循環里每隔50ms把P83狀態翻轉,即可控制LED燈的亮滅,最終程序運行PCB板的初步現象就是LCD顯示‘123456’,LED燈不停閃爍,等待按鍵中斷的來臨。
圖3-7 P83引腳輸出宏定義
四、總結:
本文介紹了Main函數的整體運行流程,重點在于編程時要優先開啟需要使用的外設時鐘,再配合庫函數的使用可以有效減少開發過程中遇到的問題,芯片的其他功能將會在后續章節逐一分享。
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
17171瀏覽量
351512 -
adc
+關注
關注
98文章
6507瀏覽量
544910 -
soc
+關注
關注
38文章
4173瀏覽量
218424
發布評論請先 登錄
相關推薦
評論