风驰STM8开发板例程教学

合集下载

1-风驰STM8开发板简介

1-风驰STM8开发板简介

作者风驰QQ 779814207E-Mail 779814207@硬件平台风驰STM8开发板库版本V2.1.0非常感谢您阅读风驰STM8的学习文档,如果您在学习STM8的过程中遇到什么问题或者对我们的开发板有任何建议的话,非常欢迎您和我们一起讨论。

首先,我们想尝试着说明以下几个问题:1.为什么选择STM8作为初学者入门的首选单片机而不是51?答:风驰从以下几点来回答这个问题:1.性价比高相比于大多数入门级51开发板所选的51型号,如STC89S52、AT89C52,风驰开发板的STM8单片机—STM8S208R8要强大得多得多。

输入捕捉、输出比较、PWM、时钟控制、电源管理、AWU、SPI、I2C、CAN总线等通信接口,例如STM8S208R8的UART模块不仅有普通的串行通信功能,还有智能卡和IrDA等特有功能。

对应同样的功能,STM8S的性价比更高,普通的51单片机很难集成那么功能,而且,最重要的一点是,STM8多了这么功能,却只比一般开发板上的51单片机贵三四块钱,如此高的性价比,我们有什么理由不选择STM8呢?2.STM8更适合初学者学习市面上的51开发板的51型号的功能一般都是最简单的,单片机本身没什么太多的东西学习,所以与其说是在学单片机,不如说是在学如何操作外设。

这样子造成的结果是对结构更复杂,功能更强大的16或32位CPU的学习其实是比较不利的。

相信很多人在学了51之后打算学习32位的STM32,却发现特别不好上手。

那么,为什么说STM8更适合初学者学习呢?首先,STM8单片机功能更强更丰富,TIM1~TIM4、ADC、SPI、I2C、CAN、BEEP、UART、选项字、FLASH、AWU,两种看门狗等等功能。

对于初学者来说,选择一款功能丰富且强大的芯片作为入门的学习是非常重要。

一开始就能接触到各种功能模块的学习以及各种通信总线的应用,在学习外设的同时深入掌握CPU的结构与功能。

学习板stm8单片机篇零基础学习开发基础篇教程

学习板stm8单片机篇零基础学习开发基础篇教程
参考入门单片机开发板淘宝店址:
图 1.3- 13 安装完成
接下来这一步很重要,就是把微云电子资料内容中>安装软件及工具>IAR FOR STM8 v1.3 里 的 config 文 件 夹 替 换 掉 C:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\stm8(注:个别将软件安装到别的路 径下,请自行分析替换)路径下的 config 文件夹。Config 文件夹如图 1.3- 14 所 示。如果没有这一步的话,会影响以后程序的下载。如果在安装过程中忘了这一 步,之后不用重新安装软件,直接加上这一步即可。
参考入门单片机开发板淘宝店址:
图 1.1- 2 Volume 文件夹
3、双击鼠标左键打开“Volume 文件夹”,出现安装 setup 所在文件夹,如图 1.1- 3 所示。
图 1.1- 3 setup 所在界面
4、右键单击“setup.exe”,选择以管理员身份运行,如图 1.1- 4 所示。
图 1.2- 4 选择 com 口
5、单击注册窗口右侧的蓝色圆箭头,提示输入软件注册码,如图 1.2- 5 所 示。
参考入门单片机开发板淘宝店址:
图 1.2- 5 软件注册界面
6、注意每个学习板的注册码不同,读者请参看学习板上的标签,上面就是 学习板的注册码。在灰色框内输入注册 HVGG_GQGG_JJJI_KNHM_JMJH_JKJG 如图 1.2- 6 所示,注意注册码要求英文半角大写。每四位为一组,读者以学习板 标签为主,若输入的注册码不对会有错误提示窗口。输入结束后单击蓝色箭头, 注册成功,如图 1.2- 7 Name 中的下箭头,选择 COM 口,由前面“如何在 win7 系统

STM8教程实验16-SPI总线+W25X16

STM8教程实验16-SPI总线+W25X16

例程十六SPI_Flash的读写在这个例程中我们将要了解一下SPI,SPI也是跟I2C一样也是有硬件来实现的。

SPI一般有4根线,一条时钟线CLK,2条数据线(MISO和MOSI),1条片选信号线。

如果大家想了解更多关于SPI的话,大家可以参考“STM8寄存器.pdf”文档。

里面有更详细的解释以说明。

我们平时多用到的是SPI主模式,跟I2C一样。

下面讲一下SPI主模式一些关于常见初始化和配置的知识都讲了,下面我们从主函数看起,逐步分析:SPI_FLASH_Init() SPI的初始化看看函数原型:SPI_Init()配置了数据位高位先发送,SPI 的传输的波特率为系统频率的2分频,SPI为工作在主模式,当SPI处于空闲状态时时钟线处于高电平,数据在第二个时钟传输周期被锁,数据线为全双工,使用软件方式代替使用NSS管脚,使用CRC校验。

SPI_Cmd()时能SPI设置片选信号线,先把它置高。

初始化弄好了,下面来看看怎样往从设备读写,首先是读写一个字节。

我们开发板上的从设备上W25X16的,所以我们要根据W25X16的Datasheet来配置一下参数。

这个函数就是在SPI总线上读写一个字节的操作,是根据SPI总线的时序来完成的。

可以参考数据传输过程那里的说明。

这个函数就是往W25X16的写数据的写使能,参考一下的时序准备写一个数据,参考时序往W25X16的一页写数据,每页做多能写4102Byte。

这个函数是往任何地址写任何多个Byte的数据,直到写满为止,最大2Mbyte。

这个函数是往任何地址读任何个字节的数据缓存在pBuffer中。

读W25X16的ID号,参考时序擦除一个Block的数据,参考时序:擦除整个Flash,参考时序主要的功能函数模块都讲完了,还有一些测试时候写的测试其他的函数,有兴趣的可以看下工程。

实验效果:风驰电子祝您学习愉快~~~!!!!!。

STM8单片机ADC、Timer、USART寄存器直接操作实用例程

STM8单片机ADC、Timer、USART寄存器直接操作实用例程

STM8 单片机ADC、Timer、USART实用例程这是一个我花了较长时间摸索出来的STM8L-051的例程,它控制LED灯,Timer2定时100us进入中断,软件启动ADC,采样10 次后取平均,将结果通过UASART发送至PC 机,在超级终端上显示的实用程序,因其内存极小,不能用printf等函数,因此对于想用这款资源极少的MCU的开发者来说,读这篇文章会大大节约你的研发时间。

有不会的问题请发邮件***************。

#include <stdio.h>#include "stm8l15x.h"#include "iostm8l051f3.h"#define LED_GPIO_PORT GPIOA#define LED_GPIO_PINS GPIO_Pin_2 | GPIO_Pin_3/* Private function prototypes -----------------------------------------------*/#define ADC1_DR_ADDRESS ((uint16_t)0x5344)#define BUFFER_SIZE ((uint8_t) 0x02)#define BUFFER_ADDRESS ((uint16_t)(&Buffer))#define ASCII_NUM_0 ((uint8_t) 48)#define ADC_RATIO ((uint16_t) 806) /*ADC_RATIO = ( 3.3 * 1000 * 1000)/4095*/#define SampleADC ((uint8_t) 0x0A)/* Private variables ---------------------------------------------------------*/uint8_t Buffer[4] = {0, 0, 0, 0};uint16_t ADCdata = 0;uint16_t ADCvalue = 0;unsigned char LED =1;unsigned char c = 8;uint16_t acode = 1234; //43 "+" 0x2B;void Delay(__IO uint16_t nCount){/* Decrement nCount value */while (nCount != 0){nCount--;}}//int putchar(int c)//{// while ((USART1_SR&0x80)==0x00);// UART2_sendchar((u8)c);// return (c);//}static void CLK_Config(void){/* Select HSI as system clock source */CLK_SYSCLKSourceSwitchCmd(ENABLE);CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI); /*High speed external clock prescaler: 1*/CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI){}/* Enable ADC1 clock */CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);/* Enable DMA1 clock */// CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);/* Enable TIM2 clock */CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE); }static void GPIO_Config(void){PC_DDR = 0X20;PC_CR1 = 0X20;PA_DDR = 0X0C;PA_CR1 = 0X0C;}static void USART1_Config(void){// ADCvalue = USART1_DR;USART1_BRR2 = 0x03;USART1_BRR1 = 0x68; //16M/9600=683USART1_CR2 = 0x0C; //Transmitter & receiver enable}static void ADC_Config(void){ADC1_CR2 = 0x22; //risign edge, softwae start, sampling time 16 ADC clockADC1_SQR3 = 0x80; //ADC = 15channelADC1_TRIGR1 = 0x10; //use internal ref,sampling time 16 ADC clock for RefRI_ASCR1 = 0x00;}void TIM2_Config(void){TIM2_PSCR = 0x07; // 应是16,但只能置三位,所以是111 fCK_PSC / 2(PSC[2:0]).// TIM2_PSCRL = 0x3F; // PSCR=0x1F3F,f=8M/(0x1F3F+1)=1000Hz,每个计数周期1ms TIM2_ARRH = 0x00; // 自动重载寄存器ARR=0x01F4=500TIM2_ARRL = 0x18; // 24X4us=96us 每记数500次产生一次中断,即500msTIM2_IER = 0x01; // 允许更新中断TIM2_CR1 = 0x05; // 计数器使能,开始计数,只允许更新中断请求}void Delay (uint16_t nCount);/* Private functions ---------------------------------------------------------*///#pragma vector = ADC1_EOC_vector//__interrupt void ADC1_EOC(void)//{// ADCdata = ADC_GetConversionValue(ADC1);// }#pragma vector =TIM2_OVR_UIF_vector__interrupt void TIM2_OVR_UIF(void){asm("sim");static uint8_t measurements = SampleADC;static uint32_t accumulator = 0;uint32_t average = 0;uint16_t factor10 = 1000;int8_t i ;ADCdata = 0;TIM2_SR1 = 0x00; //Clear UIFADC1_SR = 0x00; //Clear EOCADC1_CR1 = 0x03; // EOC interrupt unable, software set start, ADC enable// while (!(ADC1_SR & 0x01));/*最后一位不是1,结果就是全零,结果为False,!则是True,循环下去;若是1,则跳出。

STM8教程实验2-按键扫描

STM8教程实验2-按键扫描

STM8教程实验2-按键扫描实验二按键扫描按键扫描实际上就是对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_I N_PU_NO_IT);函数原型按键的宏定义设置的模式的定义下面看看按键扫描的函数原型这个函数是当有按键按下的话就返回Buttom_ON,否则的话就返回Buttom_OFF。

他们的宏定义下面在看看另外一个函数这个函数直接是对LED的管脚的值直接取反。

GPIO_WriteReverse(GPIOD, LedPins);函数原型所以Led_Reverse(led1);是和51单片机里面的led1=~led1是一样的。

也就是对该管脚的值取反。

所以在主函数里面的的意思说Buttom1按键按一下灯LED1就会亮,再按一下,灯就会灭,不断循环。

实验现象:当你把例程下载到风驰电子STM8开发板上,你就会看到每当你按一下Buttom1(Key1),灯LED1就会亮,再按一下就会灭,如此循环。

STM8教程实验4-外部中断+按键

STM8教程实验4-外部中断+按键

例程四按键中断其实在上个例程就说那个中断的,但不是重点说,例程四就重点说下这个中断的设置,主要是针对外部中断,对于其他的中断,到时在相应的模块里面会说的。

在STM8S207RB这个芯片里面有很多IO口都可以触发中断的。

主要是GPIO_A,GPIO_B,GPIO_C,GPIO_D,GPIO_E,这五组IO口都可以触发外部中断,所以大家以后要设计电路的话,必须先要查看先对应的文档来看下,了解清楚芯片的资料才好设置。

其实大家学会调用库里面的函数的话,这些初始化相当来说就很容易的了。

以上外部中断的设置来自“STM8寄存器.pdf”文档第74页下面看下电路图先吧,只要当你清楚电路具体的链接,才能完成相对应的初始化。

用到内部的资源"stm8s_clk.h""stm8s_exti.h""stm8s_gpio.h""stm8s_uart1.h""stm8s_clk.c""stm8s_exti.c""stm8s_gpio.c""stm8s_uart1.c"看完了电路图,照样是先看主函数在主函数里面最重要的是Buttom_Init();的初始化,其他的初始话上前几个例程已经有介绍过,相信大家也很清楚了。

下面重点讲下Buttom_Init()。

函数原型:第一条语句是设置Buttom1和Buttom2相对应的IO为上拉输入;第二条语句是设置GPIOD,也即是按键,为下降沿触发中断。

__enable_interrupt();这条语句是开总中断,在上一个例程里面说过了,以后凡是有触发中断的都要用上这条语句,所以说这条语句很重要的。

下面讲下外部中断常用的几个函数,这些函数都是库有的,可以直接调用的。

这个函数是设置哪组GPIO口为哪种方式触发中断的,触发方式有以下几种下降沿和顶电平触发,只有上升沿触发,只有下降沿触发,上升沿和下降沿触发这4种。

STM8教程实验26-片内EEPROM的读写

STM8教程实验26-片内EEPROM的读写

例程二十六Flash_eeprom读写实验EEPROM是单片机应用系统中经常会用到的存储器,它主要用来保存一些掉电后需要保持不变的数据。

在以前的单片机系统中,通常都是在单片机外面再扩充一个EEPROM芯片,这种方法除了增加成本外,也降低了可靠性。

现在,很多单片机的公司都推出了集成有小容量EEPROM的单片机,这样就方便了使用,降低了成本,提高了可靠性。

STM8单片机芯片内部也集成有EEPROM,容量从640字节到2K字节。

最为特色的是,在STM8单片机中,对EEPROM的访问就象常规的RAM一样,非常方便。

EEP ROM的地址空间与内存是统一编址的,地址从004000H开始,大小根据不同的芯片型号而定。

下面介绍一下STM8S了EEPROM:风驰电子STM8开发板就是大容量的了解了那么多关于STM8S 的EEPROM的知识,下面看看软件方面是如何编程的,老规矩,从主函数看起。

看到主函数,是否觉得很容易呢,在这个例程中我发了一个晚上的时间去调试,还是不行,到了第二天早上才调试成功,所以希望大家珍惜我的写的教程文档,这些教程和例程是我发了不知多少时间是总结,为了都是各位爱好者能缩短一下开发使用时间。

好了,转入正题吧,大家在做这个实验的时候要注意2个重要的地方。

第一在“stm8s_conf.h”文件中取消注释,在“stm8s.h”的文档中改成如下这样才能使用几个重要的函数。

还有一个重要的地方是,Flash_eeprom_writeread_Init()初始化一定先初始化。

下面再看看初始化的原函数这个初始化是初始化Flash正常编程方式,开启EEPROM的数据存贮器。

这是一个EEPROM的读写测试程序,EEPROM的读的话是可以每个地址每个地址的读,但是写的话必须是一个扇区一个扇区的写,每个扇区为128Byte。

至于里面的各个函数,相信大家一个就知道是什么意思了,在这里就不多说了。

里面还有一个地方要注意的,FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);这条语句就是等待EEPROM写完成,必须的,无论EEPROM的读还是写,都必须要这条语句。

STM8教程实验8-定时器TIM1

STM8教程实验8-定时器TIM1

例程八 TIM1这一节,我们将向大家介绍如何使用STM8的定时器中的基本定时功能,STM8的定时器功能十分强大,有TIM1高级定时器,也有TIM2、TIM3等通用定时器,还有TIM4基本定时器。

在STM8S参考手册里面,定时器的介绍占了1/3的篇幅,足见其重要性。

这一节,我们分别介绍TIM1的基本定时功能16位高级控制定时器(TIM1)简介:TIM1由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动。

TIM1有4个通道,分别是1到4。

分别对应于四个不同的捕获/比较通道。

高级控制定时器适用于许多不同的用途:基本的定时测量输入信号的脉冲宽度(输入捕获)产生输出波形(输出比较,PWM和单脉冲模式)对应与不同事件(捕获,比较,溢出,刹车,触发)的中断与TIM5/TIM6或者外部信号(外部时钟,复位信号,触发和使能信号)同步 高级控制定时器广泛的适用于各种控制应用中,包括那些需要中间对齐模式PWM的应用,该模式支持互补输出和死区时间控制。

高级控制定时器的时钟源可以是内部时钟,也可以是外部的信号,可以通过配置寄存器来进行选择。

TIM1的时基单元包括,如下图所示:● 16位向上/向下计数器● 16位自动重载寄存器● 重复计数器● 预分频器16位计数器,预分频器,自动重载寄存器和重复计数器寄存器都可以通过软件进行读写操作。

自动重载寄存器由预装载寄存器和影子寄存器组成。

可在在两种模式下写自动重载寄存器:● 自动预装载已使能(TIM1_CR1寄存器的ARPE位置位)。

在此模式下,写入自动重载寄存器的数据将被保存在预装载寄存器中,并在下一个更新事件(UEV)时传送到影子寄存器。

● 自动预装载已禁止(TIM1_CR1寄存器的ARPE位清除)。

在此模式下,写入自动重载寄存器的数据将立即写入影子寄存器。

更新事件的产生条件:●计数器向上或向下溢出。

●软件置位了TIM1_EGR寄存器的UG位。

●时钟/触发控制器产生了触发事件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

工程模板的创建在开发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);/*!<Set High speed internal clock */这个就是切换到外部时钟的函数,这个函数在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就会亮,再按一下就会灭,如此循环。

风驰电子祝您学习愉快~~~例程三串口通信学玩前面两个例程之后,是否觉得STM8S操作起来也很简单吧,其实是的。

在这个例程我要讲下串口通信的设置和用法。

但我们学一款新的单片机,必须要做到这样的步骤,第一会点亮LED,第二会按键扫描,第三就是要会串口通信。

为什么呢要这样的安排呢?会LED和按键扫描的就是学会的IO口的输出与输入,这是最基本的,但学会这两个的话,就要学串口通信,因为串口通信对其他模块的调式是会有很大的帮助,可以这样说必须的。

这些当你接触到你就会知道的了。

好的,下面看下我们风驰电子STM8开发板的串口通信的原理图吧。

我们的板子上以利用PL2303来下载程序和串口通信,只要大家按照上面的链接的话就可以了。

这里我只是把重要的截图给大家看而已,大家可以参考我们的风驰电子STM8S开发板原理图.pdf文件的要用到内部资源:"stm8s_clk.h""stm8s_uart1.h""stm8s_clk.c""stm8s_uart1.c"好的,我们先看我们的主程序时钟的初始化在前面都有说了,这里就不说了,下面主要来看一下串口的初始化Uart_Init();。

该函数的原型在这个例程是设置波特率为115200,8位数据位,1位停止位,没有奇偶校验,查询方式发送,中断方式接收。

Uart1 的时钟是关闭的。

下面,在看看几个重要的函数:这个函数是发送一个字节,查询发送。

当发送寄存器是空的就发送。

这个函数是把一个字节写进发送寄存器。

这个函数是获得标志的一个函数,在这里的参数是选择是发送寄存器标志。

这两个函数是库自带的,直接调用过来的。

所以说基于库开发STM8是挺快的,不用直接操作寄存器。

直接调用库里面的函数。

这个就是各种标志位参数,如果大家想查询哪个标志位的是什么状态的话就可以调用这个函数和这些标志参数,在库里面会有各种子函数,都是官方封装好的,用起来挺方便的,是不是学起来比51单片机和AVR方便多了。

这个函数是发送字符串的,包括英文和中文的字符串。

这个是函数是利用查询方法来接收一个字节,用查询方法来接收一个字节的话,会限制CPU的利用率,因为CPU要等到接收到了数据才释放,这样对于开发利用不好,所以还是提倡中断接收,这样会有效的利益CPU。

查询的话,也是查询接收寄存器,如果是RXNE==RESET的话就表明可以接受这个数据了。

下面重点介绍一下中断服务函数的写法。

在我们例程中我把所有中断函数都列出来,只要大家添加“stm8s_interrupt.c”这个文件就可以,大家可以在相应的位置添加自己的代码就可以了。

下面介绍一下接收中断服务函数:接收中断函数的中断号是0x14。

相关文档
最新文档