SYSTEM 文件夾里面的代碼,此文件夾里面的代碼由 ALIENTEK 提供,包含了幾乎每個實驗都可能用到的延時函數(shù),位帶操作,串口打印代碼等。SYSTEM 文件夾下包含了 delay、 sys、 usart 等三個文件夾。分別包含了 delay.c、 sys.c、usart.c 及其頭文件 delay.h,sys.h,usart.h。
delay 文件夾代碼介紹
delay 文件夾內(nèi)包含了 delay.c 和 delay.h 兩個文件,這兩個文件用來實現(xiàn)系統(tǒng)的延時功能,其中包含 3 個函數(shù):
void delay_init(u8 SYSCLK); //該函數(shù)用來初始化 2 個重要參數(shù):fac_us 以及 fac_ms;同時把 SysTick 的時鐘源選擇為外部時鐘
void delay_ms(u16 nms); // 該函數(shù)用來延時指定的 ms,其參數(shù) nms 為要延時的微秒數(shù)
void delay_us(u32 nus); // 該函數(shù)用來延時指定的 us,其參數(shù) nus 為要延時的微秒數(shù)。
CM3 內(nèi)核的處理器,內(nèi)部包含了一個 SysTick 定時器, SysTick 是一個 24 位的倒計數(shù)定時器,當(dāng)計到 0 時,將從 RELOAD 寄存器中自動重裝載定時初值。只要不把它在 SysTick 控制及狀態(tài)寄存器中的使能位清除,就永不停息。
下面我們開始介紹這幾個函數(shù)。
sys 文件夾代碼介紹
sys 文件夾內(nèi)包含了 sys.c 和 sys.h 兩個文件。在 sys.h 里面定義了 STM32 的 IO 口輸入讀取宏定義和輸出宏定義。 sys.c 里面只定義了一個中斷分組函數(shù)。
IO 口的位操作實現(xiàn)
該部分代碼在 sys.h 文件中,實現(xiàn)對 STM32 各個 IO 口的位操作,包括讀入和輸出。當(dāng)然在這些函數(shù)調(diào)用之前,必須先進行 IO 口時鐘的使能和 IO 口功能定義。此部分僅僅對IO 口進行輸入輸出讀取和控制。
//IO 口操作,只對單一的 IO 口!
//確保 n 的值小于 16!
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //輸出
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //輸入
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //輸出
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //輸入
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //輸出
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //輸入
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //輸出
#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //輸入
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //輸出
#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //輸入
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //輸出
#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //輸入
#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //輸出
#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n)
有了上面的代碼,我們就可以像 51/AVR 一樣操作 STM32 的 IO 口了。比如,我要 PORTA的第七個 IO 口輸出 1,則可以使用 PAout(6)=1;即可實現(xiàn)。我要判斷 PORTA 的第 15個位是否等于 1,則可以使用 if(PAin(14)==1)…;就可以了。
這里順便說一下,在 sys.h 中的還有個全局宏定義:
//0,不支持 ucos
//1,支持 ucos
#define SYSTEM_SUPPORT_UCOS 0 //定義系統(tǒng)文件夾是否支持 UCOS
SYSTEM_SUPPORT_UCOS,這個宏定義用來定義 SYSTEM 文件夾是否支持 ucos,如果在 ucos 下面使用 SYSTEM 文件夾,那么設(shè)置這個值為 1 即可,否則設(shè)置為 0(默認(rèn))。
usart 文件夾介紹
usart 文件夾內(nèi)包含了 usart.c 和 usart.h 兩個文件。這兩個文件用于串口的初始化和中斷接收。這里只是針對串口 1,比如你要用串口 2 或者其他的串口,只要對代碼稍作修改就可以了。usart.c 里面包含了 2 個函數(shù)一個是 void USART1_IRQHandler(void);另外一個是void uart_init(u32 bound);里面還有一段對串口 printf 的支持代碼,如果去掉,則會導(dǎo)致 printf無法使用,雖然軟件編譯不會報錯,但是硬件上 STM32 是無法啟動的,這段代碼不要去修改。
printf 函數(shù)支持printf 函數(shù)向串口發(fā)送我們需要的內(nèi)容,方便開發(fā)過程中查看代碼執(zhí)行情況以及一些變量值。
uart_init 函數(shù)函數(shù)是串口 1 初始化函數(shù)。該函數(shù)有 1 個參數(shù)為波特率
void USART1_IRQHandler(void)函數(shù)是串口 1 的中斷響應(yīng)函數(shù),當(dāng)串口 1 發(fā)生了相應(yīng)的中斷后,就會跳到該函數(shù)執(zhí)行。
上一篇:STM32 波形
下一篇:STM32 通用定時器
推薦閱讀最新更新時間:2025-04-15 18:00


設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- AD8182-EB,用于視頻路由和多路復(fù)用系統(tǒng)的雙路 2:1 模擬多路復(fù)用器評估板
- TDGL017,ChipKIT uC32 開發(fā)板,基于流行的 Arduino 開源硬件原型平臺和 PIC32 MCU
- AM6TW-4818SZ 18V 6瓦雙輸出DC-DC轉(zhuǎn)換器的典型應(yīng)用
- 熱插拔 PCI 總線
- AD8055AR-EBZ,AD8055ARZ 單高速運算放大器評估板,采用 8 引腳 SOIC 封裝
- BeScopeBundle,用于 BeMicro CV 開發(fā)套件的數(shù)字示波器
- NCV7344A3V1GEVB:NCV7344A3 CAN 收發(fā)器評估板
- DER-597 - 40W 2級降壓-升壓、隔離式反激可調(diào)LED鎮(zhèn)流器電源
- AM1S-0515SZ 1W DC-DC轉(zhuǎn)換器典型應(yīng)用
- AM1D-2409SH30-RZ 9V 1W DC/DC 轉(zhuǎn)換器的典型應(yīng)用
- 汽車電子芯片國產(chǎn)化加速,GS32-DSP能否替代C2000?
- 機器人行業(yè)大魚:ABB機器人業(yè)務(wù)分拆上市
- 全球首個L3級架構(gòu)誕生在中國,意味著什么?
- 汽車存儲芯片研究:大模型推動下,主機廠車用存儲芯片的選擇路徑分析
- 智駕按下急停鍵?正相反,真正的自動駕駛就要來了!
- 國內(nèi)5個固態(tài)電池項目更新動態(tài)
- 機器人如何防止碰撞?——安全探測器的技術(shù)架構(gòu)與性能突破
- 自動駕駛汽車功能安全與網(wǎng)絡(luò)安全的融合
- 車企虛假宣傳最高判刑2年!智駕、接管成禁用詞?重拳出擊砸向誰?
- 強監(jiān)管下的智能汽車:新規(guī)詳解
- ADI有獎下載活動之15 ADI公司智能可穿戴醫(yī)療保健設(shè)備解決方案
- 學(xué)AM335X課程,贏超值BB-Black團購資格,更有DIY大獎賽預(yù)熱中!
- 報名贏【掛燈、浴巾】等好禮|TI MSPM0家用電器和電機控制應(yīng)用詳解
- 瑞薩電子100套開發(fā)套件等你來搶
- 想要更直觀的了解5G?觀看羅德與施瓦茨主題演講,填問卷贏好禮!
- 工程師快樂,所以行業(yè)記者快樂!
- 有獎直播:英飛凌工業(yè)半導(dǎo)體在電機驅(qū)動行業(yè)中的應(yīng)用 2020年4月21日 上午10:00-11:30 準(zhǔn)時開啟!
- 有獎直播|Nexperia針對車聯(lián)網(wǎng)應(yīng)用的高效ESD解決方案
- TI 培訓(xùn)推薦有禮活動