stm8——LED流水燈實現

最近接觸並學習了一款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

具體可以查看datasheet:http://pdf-file.ic37.com/pdf4/STMICROELECTRONICS/STM8L_datasheet_892862/145357/STM8L_datasheet.pdf

現在來實現最簡單的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循環。加以學習後使用精確延時再試試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章