注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

chenht7的个人空间 http://home.eeworld.com.cn/space-uid-490705.html [收藏] [复制] [分享] [RSS]

日志

学STM8-1-程序-LED

已有 64 次阅读2018-1-9 16:38 |个人分类:STM8

学STM8-1-程序-LED
---
2018/1/9

# 一、内容概述  
## 1.1 主要功能
一年内,在其他岗位进行了一下试验后,重新地回到了这个电子开发的领域。于是现在开始做的事情也就是来学习做这个STM8的开发,毕竟这个STM8的成本是要比STM32便宜很多的。两者的开发模式差不多,很多都是采用了库函数开发。
这这个最基础的点亮LED的实验,就相当于在编程领域的“Hello World”吧。
功能描述:
1. 在四个引脚中,进行输出对应的LED,并且每个闪烁延时为1s。

## 1.2 整体框架

[整体框图]

# 二、开发环境  
## 2.1 开发环境
STM8的开发环境,官方所提供的为ST的免费IDE软件-“ST TOOLSET”,不过貌似不怎么好用。有些也会在其基础上配上COSMIC进行开发。
比较流行的则是采用IAR进行开发。  
目前所用的下载器和仿真器为ST-Link。而使用的硬件板子,为外购的开发核心板。

[图 使用的板子]

## 2.2 硬件连接
目前的硬件连接方式为:
LED1 -- PD1
LED2 -- PD2
LED3 -- PD3
LED4 -- PD4
芯片的引脚说明,就直接查看ST的关于芯片的引脚说明了。

## 2.3 库函数
本次实验中,主要调用的内容,也就是使用了端口的功能,所以采用了GPIO的库函数就可以了。另外则是要按照一定的频率进行输入和输出,所以作为参考时间基准用的CLK库也要进行调用。

### 2.3.1 GPIO库
对于GPIO口的调用,该函数的结构框图,可以参见《RM0016》进行,具体的使用为。该类型主要需要进行调用对应的函数来进行。为了能够带动LED灯进行点亮,从而有一个相对交道的灌电流,所以目前所采用的引脚为下拉驱动。  

### 2.3.2 CLK库
该库作为基本的程序时钟所用,也是一个很常用的库函数。目前这个芯片所调用的基准时钟,是调用了芯片内部的快速时钟作为基准时钟,并且不进行分频率。

## 2.3 函数
### 2.3.1 main.c
备份数据的寄存器。可以用来写入用户数据。

```
#include "stm8s.h"
#include "stm8s_clk.h"
#include "led.h"

int main(void)
{
  /*设置内部高速时钟16M为主时钟,对原始的时钟不进行分频*/ 
   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
   
  /*!<Set High speed internal clock */
   LED_Init();
   SetLedOFF(); /* 让所有灯灭 */
  while (1)
  {
    /*  添加你的代码  */
    #ifdef Bit_or_Port
    LED_ShowOneToOne();
    /*   以上操作的是最简单的单个LED的点亮 利用宏定义实现的  */
    #else
    LED_Display();
    /*   实现位移操作   */
    #endif  
  }
}

```

### 2.3.2 led.c

```

#include "led.h"

void LED_Init(void)
{
   GPIO_Init(GPIOD,(GPIO_PIN_4|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3),\
             GPIO_MODE_OUT_PP_HIGH_FAST );//定义LED的管脚的模式,该库的使用方法,需要查看GPIO的端口初始化设置。
}

//定义输出高电平的时候熄灭灯
void SetLedOFF(void)
{
    GPIO_Write(GPIOD, 0xff);
}

//定义LED的显示功能,其中带有延时
void LED_Display(void)
{
  u8 PortVal;
  for(PortVal=0;PortVal<5;PortVal++)
  {

      GPIOD->ODR =(u8)(~(1<<PortVal));
      
      Delay(0x1ffff);
  }
}

//该功能采用了宏定义的功能来实现
void LED_ShowOneToOne(void)
{
    LED1(ON);
    LED2(OFF);
    LED3(OFF);
    LED4(OFF);
    Delay(0x1ffff);
    LED1(OFF);
    LED2(ON);
    LED3(OFF);
    LED4(OFF);
    Delay(0x1ffff);
    LED1(OFF);
    LED2(OFF);
    LED3(ON);
    LED4(OFF);
    Delay(0x1ffff);
    LED1(OFF);
    LED2(OFF);
    LED3(OFF);
    LED4(ON);
    Delay(0x1ffff);
}

//延时函数
void Delay(u32 nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {
    nCount--;
  }
}

```


# 三、总结

这个函数是目前的入门程序了,算是了解了解了一下,熟悉了一下STM8S的开发环境,以前稍微玩过了STM32,发现两者之间真的是差不多。也算是便于复习好了。


# 参考资料
[1] 风驰iCreate嵌入式开发工作室,LED的开发文件.  
[2] 《STM8S库函数中文参考 v1.0》, BH7KQK  
[3] ST公司,《RM0016 参考手册,STM8S微控制器家族》[M].
[4] ST公司,《Access line, 16 MHz STM8S 8-bit MCU, up to 8 Kbytes Flash, data
EEPROM,10-bit ADC, 3 timers, UART, SPI, I2C》

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-1-19 11:12 , Processed in 0.016714 second(s), 11 queries , Redis On.

Powered by EEWORLD电子工程世界

© 2018 http://bbs.eeworld.com.cn/

返回顶部