打倒蠢货之stm8s单片机学习教程
笔者的知识储备:熟悉C语言 + 电子小白
因为初学者最知道初学者需要什么,所以斗胆用“教程”两字。
1.点亮led
需要的硬件:
电脑 * 1台
stm8s103f3 最小系统板 * 1个 (淘宝随便搜下一堆,下面会附图)
stlink v2 编程器 * 1个 (或者叫下载线,作用是把写好的程序下载到单片机里去)
mocrousb 线 * 1 (用来给stm8s103f3 最小系统板供电)
以上的配件,已经可以编程实现stm8s103f3 最小系统板上led的明灭控制。
下节会学习stm8s uart(名词解释后详),需要如下配件:
单排排针 间距2.54MM 普通单排插针 (多买点,焊在系统板上方便插杜邦线用的)
杜邦线 母对母 (多买点,它能插在上面的排针上,连接两根排针用的)
USB转TTL PL2303HX模块 (插到电脑USB上,能模拟个串口出来,stm8s的uart可以通过这个模块与电脑通讯)
要实现其他功能,需要另购其他配件,请读者自行斟酌购买,例如:
lm35(温度模块)
LCD1602(液晶显示屏)
IIC/I2C/接口 LCD1602液晶屏转接板 等等。
文首“打倒蠢货”指的是:现在什么人都可以往网上发文,其中不乏自称为教程之类,
可是如果此人脑中有翔,脑回路匪夷所思,看他们的教程,无异于跟人问路从A到B怎么走,他给了你一个迷宫。
愚蠢的人由于脑回路与糟糕的表达能力等问题,会把一个简单东西的复杂度凭空增加好几个数量级,浪费你无数时间;
珍爱生命,远离他们。stm8s单片机不难,远离蠢货的教程。
在stm8s103f3 最小系统板到手以后,检查一下芯片上的印字是否是stm8s103f3,
如笔者的就被JS替换为STM8S003F3P6,好在只存在一些缩水,大致功能是兼容的。
安装cosmic的C编译器(对stm8免费),下载地址如下:
http://www.cosmicsoftware.com/cxstm8_32k.exe 网上搜一下STVD STM8并下载。这个STVD是个IDE,也就是集成开发环境,但是不含C编译器,所以需要上面的来支持C语言开发。
官方推荐先装cxstm8再装STVD,安装问题请自行解决。
下面遇到第一个蠢事:
stlink v2 到手以后尾部有10个插针,而附赠了4排(4根线)的杜邦线,那么第一个问题是,怎么插?
好吧淘宝物品描述页面有附带资料下载地址,有个使用说明,可翻了一遍以后,竟然就一句话,"把stlink 与单片机连接好后",
what's the fuck !!
翻stm8s手册,网上查资料,浪费N多时间以后,弄明白了,
st-link USB壳体上有引脚功能图,连接stm8s只需要 RST SWIM GND 3.3v 这四个引脚,
stm8s103f3 最小系统板尾部有 3.3v, SWIM, GND, NRST 四个孔,焊上排针,用杜邦线把这4个引脚与stlink对应引脚连接起来(RST 对应 NRST),OK;
无法理解 st-link 的使用说明里,丝毫不提怎么连线的问题,这样还叫使用说明,真蠢。
第一次点亮led:
最小系统版上,有两个led,一个丝印PWR,一个丝印TEST,那么PWR是电源指示灯(插上micro USB线就亮了),TEST是测试用的,我们本节目标是点亮它。
首先用万用表测量,确认led的正负极。测量发现led负极与PB5引脚相连,正极经由限流电阻接到3.3V上。
明显使PB5引脚为低电平,相当于接地,就能点亮led了。
这是stm8s003f3的datasheet(英文版):
https://www.stmicroelectronics.com.cn/resource/en/datasheet/stm8s003f3.pdf有些坑爹的是,一直翻到第25页,才能看到引脚图,为什么不放到首页或前几页?因为愚蠢吧。
STM8S中文参考手册
http://www.stmcu.org/document/detail/index/id-200090 GPIO - GPIO - 通用输入输出引脚
STM8S003F3P6(20pin)应该有4组GPIO引脚 PAx PBx PCx PDx,其中x代表具体的某个引脚(0、1、2、3、4、5、6、7),每组最多8个引脚。
在stm8s003f3.pdf的25页,图上有标号的,就说明这个引脚存在。前述test led的负极,接在PB5引脚。
8位的mcu,一般寄存器是8位的(实际上这里所说的寄存器,对应单片机内某个保留地址)。明显使用一个寄存器,就能表示一组GPIO 8个引脚的状态,st就是这么做的。
stm8s的中文参考手册中,11章9节具体描述了每个寄存器的用法。
实际上很简单,下面是PBx引脚的初始化:
PB_DDR=1<<5; /* 设置数据方向寄存器 1为输出,0为输入 */
PB_CR1=1<<5; /* 设置推挽输出 */
PB_CR2=0x00; /* 设置输出频率 1为10M,0为2M */
其中PB就是GPIO PB引脚,1<<5 就是PB5引脚。
if (led)
PB_ODR = 0; /* 对数据寄存器写入值 写0亮 */
else
PB_ODR = 1<<5; /* 对数据寄存器写入值 写1灭 */
这个就是对PB5引脚置位了,这里用了'='而不是'&'与'|',其实是对整个PBx赋值的。
需要注意的是,STVD新建工程的时候,注意选单片机型号,编译器要选cosmic stm,然后STVD就能调用cosmic编译了。
值得赞的是stm8s支持片内调试,也就是程序写到单片机然后真机实时调试,写入程序并开始调试很简单,只需要点一个按钮,
也就是STVD里菜单栏下面第二行工具栏里第一个按钮,图标是蓝色的D;
按下这个按钮,会自动写入程序并进入调试状态,然后默认断到内置初始化程序,
调试快捷键与VS相同,F5,F10,F11,F9,熟悉VS的话能快速上手。
附上点灯程序源代码,由于led代码太简单了,其实只有上述几行,全在main.c,其他部分已经包含了ADC与UART的用法,
其中UART需要PC端读取串口的源程序才能看到输出,有时间在下节讲。
cosmic编译器注意事项:
1.#include <iostm8s103.h> 注意是#include cosmic 目录下的文件
2.void ADC_Init(void) 函数定义时,括号里的void不能省略!
copyright:未经笔者允许,不得修改本文文字(包括标题)
[ 此帖被wywa123在2018-07-08 16:38重新编辑 ]