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>] [然后点接受,直到出现下图界面]
[其中Name和Company可以随便填] [填写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单片机接线方式如下:
(每根线对应的位置不要插错!!)
(转载:正版ST-link/V2 J-LINK JTAG/SWD引脚定义和注意事项——智小星)
3.点亮第一个小灯
首先打开 KQ_STM8S208C8开发板_实验1_LIB_GPIO输出_流水灯控制 文件夹下 KeQianMCU_STM8S208C8_Library.eww IAR工程文件 打开后界面如上图
如果线还没接好的话先回到STlink介绍把线接好
左边的.c和.h文件暂不介绍,刚入门先完成基本操作跑通程序就好了,后期会给大家详细讲解
我们回到主函数的代码:
#include "stm8s.h"
#define LED1_ON() GPIO_WriteLow(GPIOC , GPIO_PIN_1)
#define LED2_ON() GPIO_WriteLow(GPIOD , GPIO_PIN_2)
#define LED3_ON() GPIO_WriteLow(GPIOB , GPIO_PIN_4)
#define LED4_ON() GPIO_WriteLow(GPIOD , GPIO_PIN_3)
#define LED1_OFF() GPIO_WriteHigh(GPIOC , GPIO_PIN_1)
#define LED2_OFF() GPIO_WriteHigh(GPIOD , GPIO_PIN_2)
#define LED3_OFF() GPIO_WriteHigh(GPIOB , GPIO_PIN_4)
#define LED4_OFF() GPIO_WriteHigh(GPIOD , GPIO_PIN_3)
void delay(unsigned int ms)
{
unsigned int x , y;
for(x = ms; x > 0; x--)
for(y = 3000 ; y > 0 ; y--);
}
void InitLED()
{
GPIO_Init(GPIOC , GPIO_PIN_1 , GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOD , GPIO_PIN_2 , GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOB , GPIO_PIN_4 , GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOD , GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_FAST);
}
int main(void)
{
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
InitLED();
while(1)
{
LED1_ON();
LED2_ON();
LED3_ON();
LED4_ON();
delay(1000);
LED1_OFF();
LED2_OFF();
LED3_OFF();
LED4_OFF();
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)
#define LED1_OFF() GPIO_WriteHigh(GPIOC , GPIO_PIN_1)
这就是为什么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灯一起亮一起灭那么恭喜你,成功入门噢!
总结
各类操作中还有很多细节因为篇幅的原因我没有一一介绍,在转载的文章中会有详细的讲解。
认真写起来才发现,就算是一些基础的东西也还有很多需要查漏补缺的地方啊!
|