前言
今天开始进入单片机开发的学习,我们用到的开发软件是keil,烧录软件是stc_isp。这两个软件大家可以自行去对应的官网下载安装,关于环境配置问题,这里不做过多介绍,大家可以查阅其他文章进行配置。
stc现在有32位的单片机,但是建议入门选8位的,对于新手来讲,stc8便宜,资源丰富,各种外设都支持,学习难度不大,作为入门是最佳选择。
学习内容: 会读芯片手册,能看懂原理图,能自己绘制开发板,点灯,pwm, adc,中断系统,电位器,数码管,温湿度传感器,独立按键,矩阵键盘,rtc时钟,外部中断,IIC协议, SPI协议, USB的hid协议,uart通讯,蓝牙芯片通讯等。 学习以上内容一定要配合逻辑分析仪去学习。
第一个程序
stc8核心板
功能支持
采用stc8h8k64u芯片,可以实现串口烧录、HID烧录、基准电压、按键操作、LED显示、可编程LED灯、外部存储拓展和全部引脚拓展功能。
数据手册:可去stc官网https://www.stcmcudata.com/查找下载数据手册。
原理图
点亮第一盏灯
原理图
通过控制 P5.3引脚输出高电平时,LED灯就点亮,输出低电平时LED灯就熄灭
需求实现
点亮或熄灭led灯
项目创建
当然我们这里环境配置已经搭建完成并且keil与stc_isp已经完成关联。
1.新建项目
2.配置开发板信息
创建完成后
- Target 1为项目根节点
- Source Group1为源码目录
- 可根据个人喜好来修改他们的名称
编码实现
1.结构准备
2.代码实现
点亮led灯
#include "STC8H.H"
int main() {
P5M0 = 0x00;
P5M1 = 0x00;
P53 = 1;
while(1) {}
}
熄灭led灯
#include "STC8H.H"
int main() {
P5M0 = 0x00;
P5M1 = 0x00;
P53 = 0;
while(1) {}
}
编译烧录运行
1.如果没有配置编译输出,需要进行输出配置
2.保存与编译代码
3.烧录
GPIO的理解
理解点灯案例的代码
#include "STC8H.H"
int main() {
P5M0 = 0x00;
P5M1 = 0x00;
P53 = 1;
while(1) {}
}
#include "STC8H.H"
引入头文件P5M0 = 0x00;P5M1 = 0x00;
配置引脚模式P53=1;
配置IO引脚的电平
头文件STC8H.H
针对 STC8H 系列芯片的头文件,如果Keil软件没有配置STC8环境,此处是无法导入的。STC8H.H
文件的存储目录,在Keil安装目录下的 C51\INC\STC
文件夹下。内部有其他STC芯片的头文件,如果你用的是其他芯片,则include
对应的头文件。
引脚工作模式
打开芯片数据手册,跳转到I/O口
其中我们可以通过手册获得一些信息:
-
- 1个端口对应8个引脚
- 每个端口都由一个寄存器控制
- 系列不同,端口数量不同
- 每个引脚可配置4种不同的工作模式
代码中:
P5M0 = 0x00;
P5M1 = 0x00;
指的是P5端口所有的引脚为准双向口输出,如果想设置为其他模式,可以根据实际需求进行配置。
当前我们电灯是要控制P5端口的3号引脚,也就是P53这个引脚。理论上只需要设置这个引脚的工作模式即可。
P5M1 &= ~0x08, P5M0 &= ~0x08; //准双向口
P5M1 &= ~0x08, P5M0 |= 0x08; //推挽输出
P5M1 |= 0x08, P5M0 &= ~0x08; //高阻输入
P5M1 |= 0x08, P5M0 |= 0x08; //开漏输出
- P5表示的是5号端口
- 0x08表示的是3号引脚,对应二进制
0000 1000
小结:如果上述操作以及步骤看完还比较懵,很可能是数据手册还是没看明白,简单解释一下:由数据手册可以看到有P0~P78个端口,每个端口又有8个引脚,当然也有6个引脚的。
每个端口下有两个寄存器,如P5端口有P5M1和P5M0两个寄存器,默认状态下P5M1 = 1,P5M0 =0
即 I/O口的工作模式:
软延时操作
软延时指的是通过代码来进行延时睡眠操作。我们可以借助工具来提供软延时的代码。
打开STC-ISP
工具,进行如下操作:
#include "STC8H.H"
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 57;
j = 27;
k = 112;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main() {
P5M1 &= ~0x08, P5M0 &= ~0x08; //准双向口
//P5M1 &= ~0x08, P5M0 |= 0x08; //推挽输出
//P5M1 |= 0x08, P5M0 &= ~0x08; //高阻输入
//P5M1 |= 0x08, P5M0 |= 0x08; //开漏输出
while(1) {
P53 = 1;//开
Delay1000ms();
P53 = 0;//关
Delay1000ms();
}
}
库函数
使用库函数点灯
1.导入库函数
下载STC8H的库函数
来到库函数的目录下,拷贝以下文件:
Config.h
Type_def.h
GPIO.h
GPIO.c
2.新建项目,将拷贝的四个文件放到项目文件中
新建main.c文件
将库函数添加到项目中
3.在main.c进行led的开关控制
#include "Config.h"
#include "GPIO.h"
void Delay500ms() //@11.0592MHz
{
unsigned char data i, j, k;
i = 29;
j = 14;
k = 54;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void GPIO_config(){
GPIO_InitTypeDef gpioInit;
gpioInit.Mode = GPIO_OUT_PP;// 推挽
gpioInit.Pin = GPIO_Pin_3; // P53
GPIO_Inilize(GPIO_P5, &gpioInit);
}
void main(){
// 配置IO模式
// P53 配置准双向 (使用宏函数)
// P5_MODE_IO_PU(GPIO_Pin_3);
// P53 配置推挽输出模式(使用初始化函数)
GPIO_config();
while(1){
P53 = 1;
Delay500ms();
P53 = 0;
Delay500ms();
}
}
使用delay模块延时
- 拷贝库函数中
Delay.c
和Delay.h
到工程 - 引用头文件
Delay.h
- 进行延时操作
#include "Delay.h"
delay_ms(250); // 延时250毫秒, 这里只支持1~255ms
注意:这里在烧录过程中要改一下IRC频率为24MHz
逻辑分析仪
学习内容
什么是逻辑分析仪
逻辑分析仪(Logic Analyzer)是一种工具,用于分析数字信号,例如控制信号,时钟信号等等。它可以用于调试和验证数字电路、嵌入式系统等等。
本教程采用的是mini版USB 逻辑分析仪。总共有10个端口,其中8个为分析通道,一个时钟信号,一个是GND。8路通道可以同时测8路信号。
软件安装
下载Logic Setup2.4.9版本安装包,傻瓜式下一步安装即可,文章环境配置方面不详细介绍,如果需要请查看其他文章。
功能介绍
大致关注几个区,后续过程中我们会陆续学会所有功能。
- 主界面中的顶部,如果显示
Disconnected
,说明逻辑分析仪没有和PC电脑连接;如果显示Connected
,表示已经连接 - 菜单部分
- 8个调试通道
- 右侧功能部分,绿色按钮为调试按钮
使用逻辑分析仪测试点灯
分析测试
由与原理图可知:测试P5.3端口是否是1秒钟高电平1秒钟低电平
接线
将逻辑分析仪的通道1线和开发板中的P5.3引脚连接。
将逻辑分析仪的GND线和开发板的GND连接。
测试
将LED的代码烧录到开发板中,并且运行。
打开逻辑分析仪的软件(Logic),查看是否和逻辑分析仪连接,点击按钮进行测试
- 配置采样率,最高24MS/s
- 点击绿色按钮进行采用
观察通道1,通过鼠标滚轮缩放,查看波形
鼠标放到悬浮窗上,可以查看高低电平持续时间。
总结
接下来的时间我们从stc8单片机入手,学习单片机。从stc8基础入门到stc8进阶入门,再到stc8开发板设计,到学习RTX51操作系统,最后自己动手做一个蓝牙巡线小车。希望小伙伴们可以跟我一起学习嵌入式,下期再见!