切换到宽版
爱科技/爱创意/爱折腾/爱极致;技术知识分享平台,点击进入新版数码之家网站
  • 5354阅读
  • 16回复

[其他]打倒蠢货之stm8s单片机学习教程 [复制链接]

上一主题 下一主题
离线wywa123
 
发帖
273
M币
416
专家
4
粉丝
41
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-07-08
打倒蠢货之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重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共6条打赏M币+77
枫林雪影 M币 +20 謝謝分享 2018-10-25
ppyuyi M币 +8 謝謝分享 2018-10-21
rush M币 +20 我就喜欢你的教程,官方手册讲话太绕了 2018-10-19
阳光使者 M币 +13 谢谢朋友的教程分享!我也准备有空学一下单片机,先学习朋友的教程了! 2018-10-18
tntzpq M币 +13 熱心會員,从基础学起 2018-07-08
keye M币 +3 謝謝分享,好教程 2018-07-08
离线keye

发帖
1769
M币
5395
专家
3
粉丝
48
只看该作者 1楼 发表于: 2018-07-08
请登录后查看
离线wyl

发帖
1560
M币
4363
专家
0
粉丝
26
只看该作者 2楼 发表于: 2018-07-08
回 keye 的帖子
请登录后查看
离线zeze10000

发帖
2858
M币
8559
专家
35
粉丝
112
只看该作者 3楼 发表于: 2018-07-08
请登录后查看
离线aphis

发帖
560
M币
7099
专家
11
粉丝
32
只看该作者 4楼 发表于: 2018-07-08
请登录后查看
离线一缕阳光

发帖
1725
M币
2521
专家
10
粉丝
42
只看该作者 5楼 发表于: 2018-07-08
请登录后查看
离线tntzpq

发帖
12287
M币
44328
专家
536
粉丝
470
只看该作者 6楼 发表于: 2018-07-08
请登录后查看

发帖
1078
M币
12
专家
2
粉丝
15
只看该作者 7楼 发表于: 2018-07-08
请登录后查看
离线阳光使者

发帖
32867
M币
5513
专家
113
粉丝
328
只看该作者 8楼 发表于: 2018-10-18
请登录后查看

发帖
89
M币
443
专家
0
粉丝
6
只看该作者 9楼 发表于: 2018-10-18
请登录后查看
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个