stm8——LED流水燈實現
阿新 • • 發佈:2019-01-31
最近接觸並學習了一款STM8系列的晶片。以前學習了的ARM9+Linux後,再來學習微控制器就感到上手很快了。
晶片基本資訊:
Type:STM8L151G6
8-bit ultralow power MCU,
up to 32 KB Flash,
1 KB Data EEPROM
RTC,
LCD,
timers,
USART,
I2C,
SPI,
ADC,
DAC,
comparators
現在來實現最簡單的LED流水燈功能,在接觸一塊新的板子的時候,以LED入手,並快速熟悉整個的開發環境是比較合理的選擇。
開發環境:IAR Embedded Workbench
除錯工具:ST Link
關於IAR的安裝、ST Link驅動的安裝以及環境引數的設定不再贅述,可自行參考網上資料。
===========================================
對於LED來說,它是輸出裝置,是由CPU的某個引腳來控制給高/低電平,從而使燈亮/滅的。具體的就要檢視原理圖,注意LED是給的上拉還是下拉即可。
對於這個專案來說,我們只需要到以下這些庫:
時鐘、配置、GPIO。
接下來我們user只需要實現led.c和led.h兩個檔案即可:
led.c:
#include "stm8l15x.h"
#include "led.h"
void LED_Init(void )
{
GPIO_Init(GPIOB, (GPIO_Pin_1 | GPIO_Pin_2), GPIO_Mode_Out_PP_High_Fast); //初始化引腳:1, 2 ; 輸出模式:高速推輓高電平輸出
}
void delay(unsigned int s) //簡單的延時,並不是很準確
{
unsigned int i,j;
for(i=s; i>0; i--)
for(j=150; j>0; j--);
}
led.h:
#ifndef __LED_H
#define __LED_H
#include "stm8l15x_gpio.h"
void LED_Init(void);
void delay(unsigned int s);
#define ON 0
#define OFF 1
/*使用巨集定義,使在主函式中更簡潔.都是GPIO的使用*/
#define LED1(status) if(ON == status) GPIO_ResetBits(GPIOB, GPIO_Pin_1);\
else GPIO_SetBits(GPIOB, GPIO_Pin_1);
#define LED2(status) if(ON == status) GPIO_ResetBits(GPIOB, GPIO_Pin_2);\
else GPIO_SetBits(GPIOB, GPIO_Pin_2);
#endif
主函式main.c:
#include "stm8l15x.h"
#include "led.h"
int main( void )
{
CLK_CCOConfig(CLK_CCOSource_HSI,CLK_CCODiv_1); //配置時鐘,HSI內部高速時鐘 16M
LED_Init();
while(1)
{
LED1(ON);
delay(500);
LED1(OFF);
LED2(ON);
delay(500);
LED2(OFF);
}
}
compile後,make,再下載到板子上就行了.可以看到兩個LED燈迴圈亮滅。
這裡不好的一點就是延時函式不能準確延時,只是用了簡單的for迴圈。加以學習後使用精確延時再試試。