入门
完事开头难,只要肯努力;
师傅领进门,修行看个人;
写在前面 ⅰ
当你看到本文,说明你是幸运的,作者接下来推出的一系列stm8s教程,将助你踏入stm8s的世界。
本文是stm8s教程的开始,写给刚入门stm8s的朋友。学习本文之前,建议你先掌握c语言基础知识,了解单片机基础知识。
作者将理论知识结合软件工程源代码讲述stm8s的相关知识,如果你掌握单片机基础知识,那么内容难度比较低。教程重点结合“stm8s参考手册”来讲述相关理论知识。
为方便大家阅读,本文内容已经整理成pdf文件:
http://pan.baidu.com/s/1i5uwhjr
gpio基础知识 ⅱ
gpio:general purpose input output即通用输入输出口;
每个端口都分配有一个输出数据寄存器,一个输入引脚寄存器,一个数据方向寄存器,一个选择寄存器,和一个配置寄存器。一个i/o口工作在输入还是输出是取决于该口的数据方向寄存器的状态。
ø输入模式:浮动输入和带上拉输入;
ø输出模式:推挽式输出和开漏输出;
提示:输入输出模式可以通过软件配置,stm8s没有输入下拉。
每一个io都可以配置成外部中断,可以单独使能和关闭;
当作为模拟输入时可以关闭输入施密特触发器来降低功耗。
本文gpio软件工程说明 ⅲ
为了方便大家理解软件工程具体实现了什么功能,将简述一下重要的几点内容。
本文是基础的软件工程,主要讲述软件工程相关说明、软件流程及重点讲述gpio配置的内容。
学习本文之前建议学习如下两篇文章:
iar for stm8介绍、下载、安装与注册
iar for stm8系列教程(一)_新建软件工程详细过程
文章最后提供下载内容:stm8s资料、本文对应软件工程源代码。
软件工程源代码 ⅳ
1.关于工程
工程使用最新iar for stm8(ewstm8)集成开发环境,使用stm8s最新的标准外设库。
本工程适合stm8s和stm8af系列芯片,包含:
stm8s208、stm8s207、stm8s007、stm8af52ax、stm8af62ax、stm8s105、
stm8s005、stm8af626x、stm8af622x、stm8s103、stm8s003、stm8s903
只要没有特别说明,工程都适合以上芯片,只需要修改配置为对应芯片即可。
修改两个地方:
1.device芯片型号:project -> options -> general options -> target -> device
2.芯片型号预定义:project -> options -> c/c++ compiler -> preprocessor -> defined symbols
2.软件流程
本文提供stm8s软件工程的流程比较简单:
配置时钟、初始化gpio、while循环
3.代码分析说明
a.配置时钟
默认使用16mhz高速内部rc振荡器(hsi)进行8分频,即系统时钟默认为2m(2m = 16m / 2)。我们通过软件配置成16m,即1分频。
配置时钟代码如下:
voidclk_configuration(void)
{
clk_hsiprescalerconfig(clk_prescaler_hsidiv1); //hsi = 16m (1分频)
}
其中clk_prescaler_hsidiv分频值参数可以跟踪代码查看:
typedef enum{
clk_prescaler_hsidiv1 = (uint8_t)0x00, /*!< high speed internal clock prescaler: 1 */
clk_prescaler_hsidiv2 = (uint8_t)0x08, /*!< high speed internal clock prescaler: 2 */
clk_prescaler_hsidiv4 = (uint8_t)0x10, /*!< high speed internal clock prescaler: 4 */
clk_prescaler_hsidiv8 = (uint8_t)0x18, /*!< high speed internal clock prescaler: 8 */
clk_prescaler_cpudiv1 = (uint8_t)0x80, /*!< cpu clock division factors 1 */
clk_prescaler_cpudiv2 = (uint8_t)0x81, /*!< cpu clock division factors 2 */
clk_prescaler_cpudiv4 = (uint8_t)0x82, /*!< cpu clock division factors 4 */
clk_prescaler_cpudiv8 = (uint8_t)0x83, /*!< cpu clock division factors 8 */
clk_prescaler_cpudiv16 = (uint8_t)0x84, /*!< cpu clock division factors 16 */
clk_prescaler_cpudiv32 = (uint8_t)0x85, /*!< cpu clock division factors 32 */
clk_prescaler_cpudiv64 = (uint8_t)0x86, /*!< cpu clock division factors 64 */
clk_prescaler_cpudiv128 = (uint8_t)0x87 /*!< cpu clock division factors 128 */
} clk_prescaler_typedef;
b.gpio配置
我定义了一个led灯的io,使用宏定义(方便修改):
#define led_gpio_port gpiod
#define led_gpio_pin gpio_pin_4
初始化配置为推完高速输出,输出默认值为低:
gpio_init(led_gpio_port, (gpio_pin_typedef)led_gpio_pin,gpio_mode_out_pp_low_fast);
具体配置参数有多种:
typedef enum
{
gpio_mode_in_fl_no_it = (uint8_t)0x00, /*!< input floating, no external interrupt */
gpio_mode_in_pu_no_it = (uint8_t)0x40, /*!< input pull-up, no external interrupt */
gpio_mode_in_fl_it = (uint8_t)0x20, /*!< input floating, external interrupt */
gpio_mode_in_pu_it = (uint8_t)0x60, /*!< input pull-up, external interrupt */
gpio_mode_out_od_low_fast = (uint8_t)0xa0, /*!< output open-drain, low level, 10mhz */
gpio_mode_out_pp_low_fast = (uint8_t)0xe0, /*!< output push-pull, low level, 10mhz */
gpio_mode_out_od_low_slow = (uint8_t)0x80, /*!< output open-drain, low level, 2mhz */
gpio_mode_out_pp_low_slow = (uint8_t)0xc0, /*!< output push-pull, low level, 2mhz */
gpio_mode_out_od_hiz_fast = (uint8_t)0xb0, /*!< output open-drain, high-impedance level,10mhz */
gpio_mode_out_pp_high_fast = (uint8_t)0xf0, /*!< output push-pull, high level, 10mhz */
gpio_mode_out_od_hiz_slow = (uint8_t)0x90, /*!< output open-drain, high-impedance level, 2mhz */
gpio_mode_out_pp_high_slow = (uint8_t)0xd0 /*!< output push-pull, high level, 2mhz */
}gpio_mode_typedef;
上面基础知识已经说了关于gpio的输入输出模式种类:输出分类:推挽式输出和开漏输出。推完输出具有输出驱动能力,比较常见。开漏输出是没有输出能力的,用在特殊场合,如i2c的data总线。这两种输出的具体意思可以网上搜索。
c.具体实现功能
在main函数中的while里面就是本文源代码实现的具体功能,将一个led灯(io)高低交替输出,达到led亮灭的效果。
代码:
while(1)
{
led_on; //led亮
softwaredelay(0x6000);
led_off; //led灭
softwaredelay(0x6000);
}
这里的softwaredelay函数就不用说了,主要就是软件延时一段时间。
好了,希望以上一些基础内容希望对初学的你有所帮助。
下载 ⅴ
stm8s资料:
http://pan.baidu.com/s/1o7tb9yq
软件工程源代码(stm8s-a01_gpio基础知识):
http://pan.baidu.com/s/1c2ecro0
强大的蔚来EP9,从里到外深度解析!
奥拓电子相关MiniLED显示产品已可以批量生产 未来将在LED高密度领域会持续保持竞争优势
测试环境的搭建和维护_软硬件测试环境
[行业观察] 驱动世界的锂电池,其工业背后隐藏的却是...
无线传输是未来电力能源普及的最有效的传输手段
STM8S_001_ GPIO基础知识
时间继电器的原理、结构和特点
区块链中的ETH可以解决哪些问题
浅谈电能质量提升及无功功率补偿
itc高清LED显示屏赋予场景活动空间精彩绝伦的视觉体验
正确合理的安装服务器操作系统
基于厨房定时器的设计应用过程
比特币是骗局吗?不管他人怎么论比特币中国将关停所有的交易平台
图森未来与Scania合作,在高速公路上测试载货自动驾驶卡车
荣耀7i评测 更像是荣耀6plus的延伸之作
存储芯片在推动国家信息化上承担着关键作用
拓斯达董事长吴丰礼发表题为“穿越周期,对抗惯性”的主题演讲
VR行业开始变得冷静下来,要想让VR技术真正实现落地还需努力
在5G mmWave毫米波的发展带动下 天线封装技术逐渐受到关注
一种高性能单晶硅沟道3D NOR储存器