入門
完事開頭難,只要肯努力;
師傅領進門,修行看個人;
寫在前面 Ⅰ
當你看到本文,說明你是幸運的,作者接下來推出的一系列STM8S教程,將助你踏入STM8S的世界。
本文是STM8S教程的開始,寫給剛入門STM8S的朋友。學習本文之前,建議你先掌握C語言基礎知識,了解單片機基礎知識。
作者將理論知識結合軟件工程源代碼講述STM8S的相關知識,如果你掌握單片機基礎知識,那么內容難度比較低。教程重點結合“STM8S參考手冊”來講述相關理論知識。
為方便大家閱讀,本文內容已經整理成PDF文件:
http://pan.baidu.com/s/1i5uWhJR
GPIO基礎知識 Ⅱ
GPIO:General Purpose Input Output即通用輸入輸出口;
每個端口都分配有一個輸出數據寄存器,一個輸入引腳寄存器,一個數據方向寄存器,一個選擇寄存器,和一個配置寄存器。一個I/O口工作在輸入還是輸出是取決于該口的數據方向寄存器的狀態。
?輸入模式:浮動輸入和帶上拉輸入;
?輸出模式:推挽式輸出和開漏輸出;
提示:輸入輸出模式可以通過軟件配置,STM8S沒有輸入下拉。
每一個IO都可以配置成外部中斷,可以單獨使能和關閉;
當作為模擬輸入時可以關閉輸入施密特觸發器來降低功耗。
本文GPIO軟件工程說明 Ⅲ
為了方便大家理解軟件工程具體實現了什么功能,將簡述一下重要的幾點內容。
本文是基礎的軟件工程,主要講述軟件工程相關說明、軟件流程及重點講述GPIO配置的內容。
學習本文之前建議學習如下兩篇文章:
IAR for STM8系列教程(一)_新建軟件工程詳細過程
文章最后提供下載內容:STM8S資料、本文對應軟件工程源代碼。
軟件工程源代碼 Ⅳ
1.關于工程
工程使用最新IAR for STM8(EWSTM8)集成開發環境,使用STM8S最新的標準外設庫。
本工程適合STM8S和STM8AF系列芯片,包含:
STM8S208、STM8S207、STM8S007、STM8AF52Ax、STM8AF62Ax、STM8S105、
STM8S005、STM8AF626x、STM8AF622x、STM8S103、STM8S003、STM8S903
只要沒有特別說明,工程都適合以上芯片,只需要修改配置為對應芯片即可。
修改兩個地方:
1.Device芯片型號:Project -> Options -> General Options -> Target -> Device
2.芯片型號預定義:Project -> Options -> C/C++ Compiler -> Preprocessor -> Defined Symbols
2.軟件流程
本文提供STM8S軟件工程的流程比較簡單:
配置時鐘、初始化GPIO、while循環
3.代碼分析說明
A.配置時鐘
默認使用16MHz高速內部RC振蕩器(HSI)進行8分頻,即系統時鐘默認為2M(2M = 16M / 2)。我們通過軟件配置成16M,即1分頻。
配置時鐘代碼如下:
voidCLK_Configuration(void)
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //HSI = 16M (1分頻)
}
其中CLK_PRESCALER_HSIDIV分頻值參數可以跟蹤代碼查看:
typedef enum{
CLK_PRESCALER_HSIDIV1 = (uint8_t)0x00, /*!< High speed internal clock prescaler: 1 */
CLK_PRESCALER_HSIDIV2 = (uint8_t)0x08, /*!< High speed internal clock prescaler: 2 */
CLK_PRESCALER_HSIDIV4 = (uint8_t)0x10, /*!< High speed internal clock prescaler: 4 */
CLK_PRESCALER_HSIDIV8 = (uint8_t)0x18, /*!< High speed internal clock prescaler: 8 */
CLK_PRESCALER_CPUDIV1 = (uint8_t)0x80, /*!< CPU clock division factors 1 */
CLK_PRESCALER_CPUDIV2 = (uint8_t)0x81, /*!< CPU clock division factors 2 */
CLK_PRESCALER_CPUDIV4 = (uint8_t)0x82, /*!< CPU clock division factors 4 */
CLK_PRESCALER_CPUDIV8 = (uint8_t)0x83, /*!< CPU clock division factors 8 */
CLK_PRESCALER_CPUDIV16 = (uint8_t)0x84, /*!< CPU clock division factors 16 */
CLK_PRESCALER_CPUDIV32 = (uint8_t)0x85, /*!< CPU clock division factors 32 */
CLK_PRESCALER_CPUDIV64 = (uint8_t)0x86, /*!< CPU clock division factors 64 */
CLK_PRESCALER_CPUDIV128 = (uint8_t)0x87 /*!< CPU clock division factors 128 */
} CLK_Prescaler_TypeDef;
B.GPIO配置
我定義了一個LED燈的IO,使用宏定義(方便修改):
#define LED_GPIO_PORT GPIOD
#define LED_GPIO_PIN GPIO_PIN_4
初始化配置為推完高速輸出,輸出默認值為低:
GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN,GPIO_MODE_OUT_PP_LOW_FAST);
具體配置參數有多種:
typedef enum
{
GPIO_MODE_IN_FL_NO_IT = (uint8_t)0x00, /*!< Input floating, no external interrupt */
GPIO_MODE_IN_PU_NO_IT = (uint8_t)0x40, /*!< Input pull-up, no external interrupt */
GPIO_MODE_IN_FL_IT = (uint8_t)0x20, /*!< Input floating, external interrupt */
GPIO_MODE_IN_PU_IT = (uint8_t)0x60, /*!< Input pull-up, external interrupt */
GPIO_MODE_OUT_OD_LOW_FAST = (uint8_t)0xA0, /*!< Output open-drain, low level, 10MHz */
GPIO_MODE_OUT_PP_LOW_FAST = (uint8_t)0xE0, /*!< Output push-pull, low level, 10MHz */
GPIO_MODE_OUT_OD_LOW_SLOW = (uint8_t)0x80, /*!< Output open-drain, low level, 2MHz */
GPIO_MODE_OUT_PP_LOW_SLOW = (uint8_t)0xC0, /*!< Output push-pull, low level, 2MHz */
GPIO_MODE_OUT_OD_HIZ_FAST = (uint8_t)0xB0, /*!< Output open-drain, high-impedance level,10MHz */
GPIO_MODE_OUT_PP_HIGH_FAST = (uint8_t)0xF0, /*!< Output push-pull, high level, 10MHz */
GPIO_MODE_OUT_OD_HIZ_SLOW = (uint8_t)0x90, /*!< Output open-drain, high-impedance level, 2MHz */
GPIO_MODE_OUT_PP_HIGH_SLOW = (uint8_t)0xD0 /*!< Output push-pull, high level, 2MHz */
}GPIO_Mode_TypeDef;
上面基礎知識已經說了關于GPIO的輸入輸出模式種類:輸出分類:推挽式輸出和開漏輸出。推完輸出具有輸出驅動能力,比較常見。開漏輸出是沒有輸出能力的,用在特殊場合,如I2C的DATA總線。這兩種輸出的具體意思可以網上搜索。
C.具體實現功能
在main函數中的while里面就是本文源代碼實現的具體功能,將一個LED燈(IO)高低交替輸出,達到LED亮滅的效果。
代碼:
while(1)
{
LED_ON; //LED亮
SoftwareDelay(0x6000);
LED_OFF; //LED滅
SoftwareDelay(0x6000);
}
這里的SoftwareDelay函數就不用說了,主要就是軟件延時一段時間。
好了,希望以上一些基礎內容希望對初學的你有所幫助。
下載 Ⅴ
STM8S資料:
http://pan.baidu.com/s/1o7Tb9Yq
軟件工程源代碼(STM8S-A01_GPIO基礎知識):
http://pan.baidu.com/s/1c2EcRo0
-
代碼
+關注
關注
30文章
4746瀏覽量
68348 -
GPIO
+關注
關注
16文章
1196瀏覽量
51914 -
STM8S
+關注
關注
16文章
149瀏覽量
31362
發布評論請先 登錄
相關推薦
評論