第一部分 創(chuàng)建庫(kù)函數(shù)工程
1、創(chuàng)建文件目錄
BSP文件夾中存放自定義底層驅(qū)動(dòng)程序文件;
IAR文件夾存放IAR工程文件;
LIB 文件夾中引入C 語(yǔ)言自己的庫(kù)函數(shù);
USR 文件夾中存放自定義主程序及數(shù)據(jù)庫(kù)頭文件等;
Readme 文件夾中存放自定義程序設(shè)計(jì)說(shuō)明文件;
2、將STM8庫(kù)函數(shù)文件拷貝入LIB文件夾
鏈接:
https://pan.baidu.com/s/1llVx9meEhhk0VYKbsKzLxwpan.baidu.com
提取碼:iy3v
下載解壓后進(jìn)入官方庫(kù)函數(shù)目錄:
打開LibrariesSTM8S_StdPeriph_Driver文件夾,找到inc 和src文件夾
就是我們的官方庫(kù)文件啦
將其拷貝到我們的LIB下:
inc文件夾是.h文件集合
src文件夾是.c文件集合
3、將STM8中斷入口文件拷貝入U(xiǎn)SR文件夾
STM8S_StdPeriph_LibProjectSTM8S_StdPeriph_Template文件夾下拷貝如下文件
將stm8s_it.c、stm8s_it.h拷貝到USR文件夾下
4、將stm8s_conf.h(目錄文件)拷貝到LIB文件夾下
STM8S_StdPeriph_LibProjectSTM8S_StdPeriph_Template文件夾下拷貝如下文件
將stm8s_conf.h(目錄文件)拷貝到LIB文件夾下
關(guān)于stm8s_conf.h的介紹:
stm8s_conf.h是官方固件庫(kù)頭文件的集合,如果不需要某個(gè)方面的功能,可以將對(duì)應(yīng)頭文件的聲明注釋掉。
5、打開IAR新建工程
記得把工程放入IAR文件夾下
6、將工程文件結(jié)構(gòu)與IAR工程結(jié)構(gòu)對(duì)應(yīng)起來(lái)
IAR文件夾是存工程的,不需要添加
7、往工程樹中添加文件
①、往USR中添加stm8s_it.c(不需要添加.h)
②、LIB中添加stm8s_conf.h
8、保存工程到IAR文件夾下
9、在IAR工程中創(chuàng)建main.c
添加入工程中USR樹下
10、創(chuàng)建pbdata.h pbdata.c文件并添加入U(xiǎn)SR文件夾下
(這兩個(gè)文件用來(lái)存儲(chǔ)公共函數(shù))
解決公共調(diào)用函數(shù)重復(fù)調(diào)用問(wèn)題,可以這樣定義頭文件
11、配置工程設(shè)置
①、選定MCUi型號(hào)
②、選定調(diào)試方式
③、選定編譯輸出格式
④、?設(shè)置工程調(diào)用目錄?
$PROJ_DIR$..libinc $PROJ_DIR$..libsrc $PROJ_DIR$..lib $PROJ_DIR$..usr $PROJ_DIR$..bsp $PROJ_DIR$..iar
12、在main.c中寫main函數(shù)
13、在pbdata.h中包含 stm8.h
14、在 stm8.h中選中我們用的芯片
15、嘗試編譯,至此一個(gè)庫(kù)函數(shù)工程已經(jīng)搭建完成
最終目錄如下:
16、為了完善工程,我們需要一個(gè)斷言函數(shù)來(lái)為程序提供參數(shù)檢查
#include "pbdata.h"int main(void){
//main}/*斷言函數(shù):它的作用是在編程的過(guò)程中為程序提供參數(shù)檢查*/#ifdef USE_FULL_ASSERTvoid assert_failed(u8* file,u32 line){
while(1)
{
}}#endif
17、其實(shí)我們還沒(méi)有引用官方功能庫(kù)文件,可以用什么引用什么,引用方法如下:
在LIB里添加對(duì)應(yīng)的庫(kù)文件的.c文件就可以了
18、我們自己寫的代碼放在哪?
例如我們要寫一個(gè)led驅(qū)動(dòng),創(chuàng)建led.h 和led.c文件,然后放入BSP文件夾下,同時(shí)將led。c引入工程樹下BSP下。
在led.h中要也要這樣定義頭文件
#ifndef _LED_H#define _LED_H#include "stm8s.h"#endif
在led.c中引用pbdata.h,而在pbdata.h中引用led.h
CSDN-專業(yè)IT技術(shù)社區(qū)-登錄blog.csdn.net
第二部分 GPIO庫(kù) (gpio.c)
1、GPIO_Init(GPIOx,GPIO_Pin,GPIO_Mode) // GPIO初始化
其中GPIO_Pin
其中GPIO_Mode
GPIO_Init(GPIOA, GPIO_PIN_LNIB, GPIO_MODE_IN_FL_NO_IT);
2、GPIO_DeInit(GPIOx) //GPIO回復(fù)初始狀態(tài)
注意:復(fù)位狀態(tài)下,所有的引腳都是懸浮輸入模式
GPIO_DeInit(GPIOA);
3、GPIO_Write(GPIOx,PortVal) //GPIO按組寫值
GPIO_Write(GPIOA, 0x00);
4、GPIO_WriteHigh(GPIOx,PortPins) //GPIO按引腳號(hào)寫1
GPIO_WriteHigh(GPIOA, GPIO_PIN_0);
5、GPIO_WriteLow(GPIOx,PortPins) //GPIO按引腳號(hào)寫0
6、GPIO_WriteReverse(GPIOx,PortPins)
7、GPIO_ReadInputData(GPIOx) //讀取GPIO輸入寄存器值
u8 port_value;port_value = GPIO_ReadInputData(GPIOA);
8、GPIO_ReadOutputData(GPIOx) //讀取GPIO輸出寄存器值
u8 port_value;port_value = GPIO_ReadOutputData(GPIOA);
9、GPIO_ReadInputPin(GPIOx,GPIO_Pin) //讀取GPIO輸入寄存器特定引腳位的值
10、GPIO_ExternalPullUpConfig(GPIOx,GPIO_Pin,NewState)
//設(shè)置某引腳使能上拉電阻
NewState:ENABLE或者DISABLE
第三部分 時(shí)鐘控制庫(kù) (clk.c)
1、CLK_DeInit() //恢復(fù)相關(guān)的時(shí)鐘寄存器到默認(rèn)值
CLK_DeInit();
2、CLK_HSECmd(NewState) //啟動(dòng)或者關(guān)閉外部高速振蕩器(HSE)
NewState:ENABLE或者DISABLE
3. CLK_HSICmd(NewState) //啟動(dòng)或者關(guān)閉內(nèi)部高速振蕩器(HSI)
4. CLK_LSICmd(NewState) //啟動(dòng)或者關(guān)閉內(nèi)部低速振蕩器(LSI)
5. CLK_CCOCmd(NewState) //啟動(dòng)或者關(guān)閉內(nèi)部時(shí)鐘輸出功能
6. CLK_ClockSwitchCmd(NewState) //啟動(dòng)或者關(guān)閉內(nèi)部時(shí)鐘切換
7. CLK_FastHaltWakeUpCmd(NewState) //啟動(dòng)或者關(guān)閉快速喚醒功能
8. CLK_SlowActiveHaltWakeUpCmd(NewState) //啟動(dòng)或者關(guān)閉活躍停機(jī)模式下的電壓調(diào)節(jié)器
9.CLK_ITConfig(CLK_IT,NewState) //啟動(dòng)或者關(guān)閉指定的時(shí)鐘中斷
其中CLK_IT的取值:
10. CLK_ClockSwitchConfig(CLK_SwitchMode,CLK_NewClock,ITState,CLK_CurrentClockState) //系統(tǒng)時(shí)鐘切換配置
其中:
CLK_SwitchMode:切換模式(MANUAL和AUTO兩種方式)
CLK_NewClock:DISABLE或者ENABLE
ITState:DISABLE或者ENABLE
CLK_CurrentClockState:DISABLE或者ENABLE
11、CLK_HSIPrescalerConfig(HSIPrescaler) //配置內(nèi)部高速振蕩器(HSI)的分頻器
其中:HSIPrescaler取值
12、CLK_CCOConfig(CLK_CCO) //配置時(shí)鐘輸出腳(CCO)的時(shí)鐘源
其中CLK_CCO:
13、CLK_PeripheralClockConfig(CLK_Peripheral,NewState)
//啟動(dòng)或者關(guān)閉指定的外設(shè)時(shí)鐘
其中CLK_Peripheral取值:
CLK_PERIPHERAL_I2C
CLK_PERIPHERAL_SPI
CLK_PERIPHERAL_UART1 ~3
CLK_PERIPHERAL_TIMER1 ~6
CLK_PERIPHERAL_AWU
CLK_PERIPHERAL_ADC
CLK_PERIPHERAL_CAN
14. CLK_SYSCLKConfig(CLK_Prescaler) //配置系統(tǒng)時(shí)鐘分頻器
其中CLK_Prescaler的值:
15、CLK_SWIMConfig(CLK_SWIMDivider) //配置SWIM時(shí)鐘分頻器
其中:
16、CLK_CANConfig(CLK_CANDivider) //配置CAN時(shí)鐘頻率
其中:
17、 CLK_ClockSecuritySystemEnable() //啟用時(shí)鐘安全系統(tǒng)
19. CLK_AdjustHSICalibrationValue(CLK_HSICalibrationValue)
//修復(fù)內(nèi)部高速振蕩器頻率
20.CLK_GetClockFreq() //獲取系統(tǒng)時(shí)鐘頻率
u32 u32_clk_freq; u32_clk_freq = CLK_GetClockFreq();
21. CLK_GetSYSCLKSource() //獲取系統(tǒng)時(shí)鐘源
22. CLK_GetFlagStatus //獲取系統(tǒng)時(shí)鐘標(biāo)志狀態(tài)
23. CLK_GetITStatus(CLK_IT) //獲取系統(tǒng)時(shí)鐘中斷標(biāo)志狀態(tài)
其中:
24.CLK_ClearITPendingBit(CLK_IT) //清除系統(tǒng)時(shí)鐘中斷標(biāo)志狀態(tài)
CLK_ClearITPendingBit(CLK_IT_CSSD);
上一篇:IAR for STM8學(xué)習(xí)筆記(一)建立工程
下一篇:STM8電源模式管理及功耗控制
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來(lái)
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問(wèn)外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- RISC-V人才該怎么培養(yǎng)?專家這樣說(shuō)
- 割草機(jī)器人,四大流派的巔峰之戰(zhàn)
- 車載顯示迎來(lái)三大革命丨“形態(tài)”革命
- 什么是“CDC+空懸”?
- 汽車電子信息安全:如何有效保護(hù)硬件Debug口?
- 新能源汽車核心技術(shù)之“大三電”、“小三電”
- 芯原如何推動(dòng)RISC-V嵌入式軟件人才發(fā)展?
- Arm 技術(shù)助力《國(guó)家地理》探險(xiǎn)家繪制地球海洋圖景
- Arm SME2 技術(shù)加速安卓 AI 升級(jí),驅(qū)動(dòng)移動(dòng)應(yīng)用下一代功能革新
- VGA接口定義、功能用途和種類
- 有獎(jiǎng)直播|ADI多參數(shù)光水質(zhì)分析平臺(tái)
- 【EEWORLD帶你DIY】數(shù)字示波器V2.0火熱進(jìn)行中......
- 速度與激情,為你私人訂制。R&S攜多功能基礎(chǔ)示波器帶你身臨其境!
- 更新個(gè)人資料贏驚喜大禮
- 選修有禮:Keysisht“測(cè)試測(cè)量”系列12節(jié)新課程,炎夏預(yù)約開啟~
- 【EEWORLD第四十三屆】2012年10月社區(qū)明星人物揭曉!
- 【問(wèn)題征集】大學(xué)生美國(guó)TI行,你問(wèn)我送禮!
- 大學(xué)堂學(xué)分閃亮登場(chǎng) 看誰(shuí)率先登上光榮榜!
- 快來(lái)訪問(wèn)泰克高速串行通信專題 配置您的專屬解決方案 贏好禮!
- 矩陣按鍵控制動(dòng)態(tài)數(shù)碼管
- 單片機(jī)中級(jí)項(xiàng)目13丨矩陣按鍵數(shù)碼管移位顯示
- 串口通過(guò)164控制三個(gè)數(shù)碼管
- 降低成本 提升出行效率 聊聊百度無(wú)人車發(fā)展趨勢(shì)
- 2021年,自動(dòng)駕駛卡車迎拐點(diǎn)
- 工信部:用戶應(yīng)及時(shí)設(shè)置SIM卡密碼 丟手機(jī)后即刻掛失
- 全新小米手表宣布:升級(jí)支持血氧
- 盧偉冰暗示Redmi考慮推出mini機(jī)型 但續(xù)航影響大
- iPhone 12系列官方換屏多少錢?蘋果給出答案
- 蘋果或給iPhone 13同時(shí)配備屏下指紋和Face ID傳感器
- TI電源課程領(lǐng)獎(jiǎng)曬單分享
- 集成顯卡2012年被淘汰 嵌入式取而代之?會(huì)嗎?
- C# Mobile 為什么Cursor.Current = Cursors.WaitCursor;調(diào)不出WaitCursor???
- 百度連接不上,
- 軟硬件結(jié)合,到底是怎么回事???
- 這課程碉堡了,中國(guó)電源學(xué)會(huì)專家主講,基于PFC電源設(shè)計(jì),11課時(shí),全程干貨~
- 關(guān)于multisim2001教程
- PUC、POR】MSP430的復(fù)位信號(hào)
- 儀表故障發(fā)生的一般規(guī)律你知道多少