STM8培训课

STM8第一次培训课



前言

STM8线下小讲堂,老师带20级物联网实验室的同学们入门。
本次课为初学同学讲解一些专业名词,简单解析跑马灯代码。
在这里插入图片描述
(偷偷放一张老师上课的照片)


一、新词汇

STM8:意法半导体公司生产的8位的单片机,本次实验所用型号为STM8S208C8
机器周期:在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。
晶振:晶体振荡器,可以产生高度稳定的信号
寄存器:有限存贮容量的高速存贮部件,功能是存储二进制代码,是由具有存储功能的触发器组合起来构成的
分频:分频是指将意单一频率信号的频率降低为原来的1/N,就叫N分频

(转载:GPIO就是芯片上的一根干啥都行的引脚——嵌入式ARM
GPIO:general purpose input/output 通用输入/输出端口

(转载:常用的推挽输出、开漏输出、上拉输入——奋斗的Brandon
推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定
开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)
浮空输入:浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的,它可能是0V,也可能是VCC,还可能是介于两者之间的某个值(最有可能)

(转载:共阴、共阳数码管的详解——Denpx
共阴数码管:指将所有发光二极管的阴极接到一起形成公共阴 极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当 某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极 为低电平时,相应字段就不亮。
共阳数码管:指将所有发光二极管的阳极接到一起形成公共阳 极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 VCC 上,当 某一字段发光二极管的阴极为低高电平时,相应字段就点亮,当某一字段的阴极 为高电平时,相应字段就不亮。

(转载:上拉和下拉的解释——quinn1994
上拉电阻:把一个不确定的信号通过电阻连接到高电平,是电信号初始化为高电平
下拉电阻:把一个不确定的信号通过电阻连接到地,使电信号初始为低电平

(转载:TTL和CMOS的区别——dayou1024
高低电平:高低电平的划分对于TTL来说高电平是:2.4V-5.0V,低电平是:0.0V-0.4V;
对于CMOS来说高电平是:4.99-5.0v,低电平是:0.0-0.01v

二、入门内容

1.软件安装

首先运行开光盘资料文件夹中4_开发软件\IAR For STM8 V1.301\IAR For STM8\IAR STM8 1.3\CD-EWSTM8-1301路径下的autorun.exe程序
在这里插入图片描述

[点击 **Install the IAR…**进行安装]
在这里插入图片描述

[点击Next>]在这里插入图片描述
[然后点接受,直到出现下图界面]

在这里插入图片描述
[其中NameCompany可以随便填]
[填写License这一栏时先回到文件夹:IAR For STM8 V1.301]
在这里插入图片描述
[右键以管理员身份运行 Keygen.exe 文件]
[Product选择下图中的版本]
[HostID会自动生成,我们只需要点击 Get ID ]
[将License number复制粘贴到上一步的License#中]
(切记,暂时不要先关闭Keygen.exe,因为下一步还要用上)
在这里插入图片描述
[点击
Next>
]
[接下来复制License key 中的内容,粘贴到下图License Key的框中,完成后点击Next>]
在这里插入图片描述
[选择Complete后点击Next>进行安装,然后一直Next直到安装结束点击finish就大功告成了]
在这里插入图片描述

代码如下(示例):

2.STlink介绍

(转载:ST-Link资料01_ST-Link介绍,认识各版本硬件及特征——ybhuangfugui

ST-Link是用于STM8和STM32微控制器的在线调试器和编程器,也是大家口中的下载器。
我们常用的为ST-Link V2,V2包含两个版本:ST-LINK/V2(标准版) 和 ST-LINK/V2-ISOL(隔离版)
官方地址:
https://www.st.com/en/development-tools/st-link-v2.html

我们使用的STM8S208C8单片机接线方式如下:
1123
在这里插入图片描述
在这里插入图片描述

(每根线对应的位置不要插错!!)

(转载:正版ST-link/V2 J-LINK JTAG/SWD引脚定义和注意事项——智小星

3.点亮第一个小灯

首先打开
在这里插入图片描述
KQ_STM8S208C8开发板_实验1_LIB_GPIO输出_流水灯控制 文件夹下
在这里插入图片描述
KeQianMCU_STM8S208C8_Library.eww IAR工程文件
在这里插入图片描述打开后界面如上图

如果线还没接好的话先回到STlink介绍把线接好

左边的.c和.h文件暂不介绍,刚入门先完成基本操作跑通程序就好了,后期会给大家详细讲解
在这里插入图片描述

我们回到主函数的代码:

/* 科嵌单片机科技STM8S208C8开发板光盘资料V1_2017_09_17 */
/* main.c */
/*  添加库函数头文件 */
#include "stm8s.h"

#define     LED1_ON()       GPIO_WriteLow(GPIOC , GPIO_PIN_1) //LED1亮
#define     LED2_ON()       GPIO_WriteLow(GPIOD , GPIO_PIN_2) //LED2亮
#define     LED3_ON()       GPIO_WriteLow(GPIOB , GPIO_PIN_4) //LED3亮
#define     LED4_ON()       GPIO_WriteLow(GPIOD , GPIO_PIN_3) //LED4亮

#define     LED1_OFF()      GPIO_WriteHigh(GPIOC , GPIO_PIN_1) //LED1灭
#define     LED2_OFF()      GPIO_WriteHigh(GPIOD , GPIO_PIN_2) //LED2灭
#define     LED3_OFF()      GPIO_WriteHigh(GPIOB , GPIO_PIN_4) //LED3灭
#define     LED4_OFF()      GPIO_WriteHigh(GPIOD , GPIO_PIN_3) //LED4灭


/*******************************************************************************
**函数名称:void delay(unsigned int ms)     Name: void delay(unsigned int ms)
**功能描述:大概延时
**入口参数:unsigned int ms   输入大概延时数值
**输出:无
*******************************************************************************/
void delay(unsigned int ms)
{
  unsigned int x , y;
  for(x = ms; x > 0; x--)           /*  通过一定周期循环进行延时*/
    for(y = 3000 ; y > 0 ; y--);
}

/*******************************************************************************
**函数名称:void InitLED()
**功能描述:初始化LED函数
**入口参数:无
**输出:无
*******************************************************************************/
void InitLED()
{
  //设置PC1为快速推挽输出 ,LED1
  GPIO_Init(GPIOC , GPIO_PIN_1 , GPIO_MODE_OUT_PP_LOW_FAST);  
 
  //设置PD2为快速推挽输出 ,LED2
  GPIO_Init(GPIOD , GPIO_PIN_2 , GPIO_MODE_OUT_PP_LOW_FAST);  
  
  //设置PB4为快速推挽输出 ,LED3
  GPIO_Init(GPIOB , GPIO_PIN_4 , GPIO_MODE_OUT_PP_LOW_FAST);  
  
  //设置PD3为快速推挽输出 ,LED4
  GPIO_Init(GPIOD , GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_FAST); 

}

/* 主函数 */
int main(void)
{
  //内部时钟为1分频 = 16Mhz
  CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
  InitLED();              //调用LED初始化函数
  while(1)
  {
     LED1_ON();     //点亮LED1
     LED2_ON();     //点亮LED2
     LED3_ON();     //点亮LED3
     LED4_ON();     //点亮LED4
     delay(1000);   //空跑大概延时
     LED1_OFF();    //点灭LED1
     LED2_OFF();    //点灭LED2
     LED3_OFF();    //点灭LED3
     LED4_OFF();    //点灭LED4
     delay(1000);   //空跑大概延时
  }
}

void assert_failed(u8* file, u32 line)//是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数
{ 
  while (1)
  {
    
  }
}

我对代码稍作解释
首先看原理图中的流水灯部分:
在这里插入图片描述
Led灯的正极接+3.3v,各led的负极从上到下依次连接着单片机的PC1,PD2,PB4,PD3(PC1是指单片机C端口的1号引脚上,C端口一共有PC0~7八个引脚)。根据LED发光二极管的特性可知,正极接高电平,负极接低电平,LED导通(亮);当正极接高电平,负极也接高电平,正负没有电压差LED不导通(灭)。于是有以下定义:

#define   LED1_ON()    GPIO_WriteLow(GPIOC , GPIO_PIN_1) //LED1亮
#define   LED1_OFF()   GPIO_WriteHigh(GPIOC , GPIO_PIN_1) //LED1灭

这就是为什么LED1_ON()亮灯操作是PC1输出低电平,LED1_OFF()灭灯操作是PC1输出高电平。
其中(GPIOC , GPIO_PIN_1) :GOIOC表示C端口, GPIO_PIN_1表示是1号引脚
以此类推(GPIOB , GPIO_PIN_4)表示PB4

void delay(unsigned int ms)延时函数的原理呢,
就是通过多次的for循环,达到一个大概延时的功能。
延时的时间长短与分频系数和单片机执行一个基本操作的机器周期时间有关。

接着我们只需要点击右上角的Download and Debug,就能编译代码然后自动下载到单片机里去了。
(正常下载代码的时候STlink的指示灯会闪烁)
在这里插入图片描述
下载完成后还需要点击左上角的红色叉叉,就能看到单片机开始独立运行程序了!
在这里插入图片描述

能看到四个LED灯一起亮一起灭那么恭喜你,成功入门噢!


总结

各类操作中还有很多细节因为篇幅的原因我没有一一介绍,在转载的文章中会有详细的讲解。

认真写起来才发现,就算是一些基础的东西也还有很多需要查漏补缺的地方啊!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵芝三昧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值