stm8——LED流水灯实现

2 篇文章 0 订阅

最近接触并学习了一款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循环。加以学习后使用精确延时再试试。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值