风驰STM8开发板例程教学
工程模板的创建
在开发STM8的时候,首先要学会创建一个工程模板,所有的开发历程都是基于这个工程模板。STM8有官方库,在开发的时候很方便,可以远离查寄存器的时代。学过51单片机或者AVR的人都知道,查寄存器是很不方便的。现在带大家进入一个利用库来开发单片机的新时代。本开发板的所有例程都是基于库V2.0.0版本。
STM8的编译器是IAR Embedded Workbench。下面叫大家如果去创建一个过程模板
工程模板创建步骤:
1、双击,打开IAR的界面,点击File->New->Workspace,
点击Project->Create New Project,出现
点击OK就行。
2、右击工程名就可以添加文件夹和文件,
3、
4、设置工程的Options,右击工程名->Options,设置其中两项,如下图
5、
在这里设置Device 为STM8S207RB 因为在我们风驰电子STM8开发板的主控芯片是STM8S207RB
这里是设置编译路径,使用了3条语句
$PROJ_DIR$\..\FWlib\inc
$PROJ_DIR$\..\FWlib\src
$PROJ_DIR$\..\USER
$PROJ_DIR$\..意思是找到当前工程的上一级
$PROJ_DIR$\..\FWlib\inc意思是先找到当前工程的上一级FWlib文件夹,再找到inc文件夹
$PROJ_DIR$\.意思是当前文件夹
这里是设置输出文件为可执行文件
此外,我们还有修改一下头文件
在stm8s.h的头文件修改
#define STM8S207 /*!< STM8S High density devices without CAN */
在stm8s_conf.h的头文件里修改你要用到的头文件,不要用到的资源的头文件可以把它注释调就可以,方便使用,到这里,相信大家都体会到用库的方便性了吧。
到这里 ,点击就可以编译成功了。
当你看到这里的话相信你会了怎样创建一个工程了。下面看STM8的一些主要的初始化,最重要的一点的是时钟的初始化。其实STM8你不设置时钟也可以运行的,因为STM8单片机复位它就默认为内部时钟的8分频。所以我们要设置时钟,STM8S可以设置外部时钟,也可以设置内部时钟,在这里我们的就设置内部高速时钟16M,要不然的话,你一旦复位,就只有内部16M晶振的8分频。
工程模板里面使用的资源:
“stm8s_clk.h”
“stm8s.h”
“stm8s_clk.c”
下面直接看下我们的主函数
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); 配置内部高速时钟,就是16M 的内部时钟
void CLK_HSIPrescalerConfig(CLK_Prescaler_TypeDef HSIPrescaler)函数原型
分频设置是个枚举来的
时钟的设置可以参考STM8寄存器.pdf的图13 时钟树
风驰电子祝您学习愉快~~~!!!!!
例程一流水灯
流水灯实验是每个电子爱好者学任何一款单片机必备先学会的一个实验,因为流水灯的操作就是简单的对IO口的直接操作,是初学者最喜欢的一个实验,但你会了点亮一个灯的时候,证明了你对这款单片机有了初步的了解和初步的操作,以后那个模块就相当来说就好办了。
下面介绍下在风驰电子STM8开发板实现流水灯操作要用到的资源
这是开发板上的电路连接图。只要给PD0、PD1、PD2、PD3任何一个低电平,灯就会亮了。
流水灯要用到的内部资源
"stm8s_clk.h"
"stm8s_clk.c"
"stm8s_gpio.h"
"stm8s_gpio.c"
"stm8s.h"
好了,我们先看下主函数
这里是一些初始化,
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
/*! 这个就是切换到外部时钟的函数,这个函数在STM8S工程模板的文档说得很详细了,在这里就不多说了。 LED_Init();LED 的一些初始化,必须要初始化这个函数,否则,LED就不能正常工作了,下面的LED_Init()函数原型 这个函数的意思是定义LED 灯的的管脚位PD0、PD1、PD2、PD3为推挽输出 /*!< Output push-pull, high level, 10MHz */ 相应的管脚模式是可以选择的,在stm8s_gpio.h 的文件里面有相应的定义 在LED_ShowOneToOne();中实现了单个LED的点亮或熄灭 函数原型 LED1(ON)这个是宏定义来实现的,这样看起来就简单明了。我们再看看宏定义 我们再看看在STM8里面也可以直接对每个IO口置1或写0,跟51单片机一样的,主要在下面这两个函数实现,先看下他们的函数原型 在这个函数中,只有你配置好是哪个IO口,他就会相对于的该IO口设为0,即是低电平。在我们的例程其中一个的话就是设置参数GPIOD,GPIO_PIN_0,就好象51里面的P3_0=0;操作起来就好像51的一样的操作。 同样这个就是给IO口置1,也就是置高电平。 大家再看看下面的函数就是实现 函数原型 这个函数写得有点复杂,是因为为了让LED在风驰电子STM8开发板按顺序的流起来。主要看下这条语句就可以了 这条语句的让第几盏灯亮,当PortVal=0的话就是我们开发板上的LED0亮。在这里用左移操作符<<和取反操作符~。相信看过C语言的知道是什么意思了,在这里不多说了。 还有一个函数大家需要知道的 这个函数就是直接对某个端口的8位直接赋值。看看它的函数原型 但大家看到这里的话,相信大家对IO的操作就不在话下了。好的,对IO口的操作就分析到这里。 实验现象 当大家把我的例程下载到风驰电子STM8开发板就可以看到流水灯按照一定的频率兜圈不断的跑 风驰电子祝您学习愉快~~~!!!!! 实验二 按键扫描 按键扫描实际上就是对IO口的输入捕捉操作,跟LED 的刚好相反,LED 的对IO 口输出的操作,因此在操作上很相似的。相信大家会点亮LED 的话,那么按键扫描的话也很容易了。先看下风驰电子STM8开发板上的按键的硬件连接 由电路连接图来看,如果按键按下的话,IO口读到的电平信号就是低电平。 先看看按键扫描要用到的内部资源 "stm8s.h" "stm8s_clk.h" "stm8s_clk.c" "stm8s_gpio.h" "stm8s_gpio.c" 首先,我们从主函数看起 时钟和LED的初始话大家都清楚了,这里不多说了。下面主要来看下按键的初始化Buttom_Init(); 他的函数原型 很简单,对吧,就是初始话一下IO口。上面的意思是对按键Buttom1、Buttom2、Buttom3的相应IO口初始话为上拉输入,没触发中断。 GPIO_Init(GPIOD,Buttom1|Buttom2|Buttom3,GPIO_MODE_IN_PU_NO_IT);函数原型 按键的宏定义 设置的模式的定义 下面看看按键扫描的函数原型 这个函数是当有按键按下的话就返回Buttom_ON,否则的话就返回Buttom_OFF。 他们的宏定义 下面在看看另外一个函数 这个函数直接是对LED的管脚的值直接取反。 GPIO_WriteReverse(GPIOD, LedPins);函数原型 所以Led_Reverse(led1);是和51单片机里面的led1=~led1是一样的。也就是对该管脚的值取反。所以在主函数里面的 的意思说Buttom1按键按一下灯LED1就会亮,再按一下,灯就会灭,不断循环。 实验现象: 当你把例程下载到风驰电子STM8开发板上,你就会看到每当你按一下Buttom1(Key1),灯LED1就会亮,再按一下就会灭,如此循环。 风驰电子祝您学习愉快~~~!!!!!