STM8简单示波器程序IAR

合集下载

使用IAR如何修改STM8S库(一)

使用IAR如何修改STM8S库(一)
/* #defineSTM8S103 */
/* #defineSTM8S903 */
#endif
根据你的CPU类型选择宏定义,比如我这里用的是105系列,则修改为:
/* #defineSTM8S208 */
/* #defineSTM8S207 */
#define STM8S105
/* #defineSTM8S103 */
application.
Tip:To avoid modifying thisfile each timeyou needto switch between these
devices, youcan define the device in your toolchaincompilerpreprocessor. */
/*************************************SPI
************************************/#define _SPI (1)
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
/* #defineSTM8S903 */
选择好CPU类型后,还需查看选择的类型中哪些外设是包含的哪些外设没
有包含,将没有包含的外设驱动c文件在工程中去掉
如105系列没有adc2、can、uart1、uart3
2、修改stm8s_conf.h文件
选择好CPU类型后,接下来就是选择要使用的外设了,stm8s_conf.h就是外
设驱动选择开关,在用户函数中,只需包含此头文件即可。
比如程序中需要使用到SPI外设,则将此文件的
/*************************************SPI

stm8笔记2-定时3更新中断+pwm输出(IDE为IAR)

stm8笔记2-定时3更新中断+pwm输出(IDE为IAR)

stm8笔记2-定时3更新中断+pwm输出(IDE为IAR)⼀:IAR编译器中断函数说明下⾯说⼀下在IAR下,在IAR下必须要添加iostm8s105s6.h⽂件,在⽂件的最后有如下内容:/*-------------------------------------------------------------------------* Interrupt vector numbers*-----------------------------------------------------------------------*/#define AWU_vector 0x03#define SPI_TXE_vector 0x0C#define SPI_RXNE_vector 0x0C#define SPI_WKUP_vector 0x0C#define SPI_CRCERR_vector 0x0C#define SPI_OVR_vector 0x0C#define SPI_MODF_vector 0x0C#define TIM1_OVR_UIF_vector 0x0D#define TIM1_CAPCOM_BIF_vector 0x0D#define TIM1_CAPCOM_TIF_vector 0x0D#define TIM1_CAPCOM_CC1IF_vector 0x0E#define TIM1_CAPCOM_CC2IF_vector 0x0E#define TIM1_CAPCOM_CC3IF_vector 0x0E#define TIM1_CAPCOM_CC4IF_vector 0x0E#define TIM1_CAPCOM_COMIF_vector 0x0E#define TIM2_OVR_UIF_vector 0x0F#define TIM2_CAPCOM_CC1IF_vector 0x10#define TIM2_CAPCOM_TIF_vector 0x10#define TIM2_CAPCOM_CC2IF_vector 0x10#define TIM2_CAPCOM_CC3IF_vector 0x10#define UART1_T_TXE_vector 0x13#define UART1_T_TC_vector 0x13#define UART1_R_OR_vector 0x14#define UART1_R_RXNE_vector 0x14#define UART1_R_IDLE_vector 0x14#define UART1_R_PE_vector 0x14#define UART1_R_LBDF_vector 0x14#define I2C_ADD10_vector 0x15#define I2C_ADDR_vector 0x15#define I2C_OVR_vector 0x15#define I2C_STOPF_vector 0x15#define I2C_BTF_vector 0x15#define I2C_WUFH_vector 0x15#define I2C_RXNE_vector 0x15#define I2C_TXE_vector 0x15#define I2C_BERR_vector 0x15#define I2C_ARLO_vector 0x15#define I2C_AF_vector 0x15#define I2C_SB_vector 0x15#define ADC1_AWS0_vector 0x18#define ADC1_AWS1_vector 0x18#define ADC1_AWS2_vector 0x18#define ADC1_AWS3_vector 0x18#define ADC1_AWS4_vector 0x18#define ADC1_AWS5_vector 0x18#define ADC1_AWS6_vector 0x18#define ADC1_EOC_vector 0x18#define ADC1_AWS8_vector 0x18#define ADC1_AWS9_vector 0x18#define ADC1_AWDG_vector 0x18#define ADC1_AWS7_vector 0x18#define TIM4_OVR_UIF_vector 0x19#define FLASH_EOP_vector 0x1A#define FLASH_WR_PG_DIS_vector 0x1A对照中断向量表,如果⽤到中断,必须⾃⼰写中断,⽐如TIM3定时器中断#pragma vector=TIM3_OVR_UIF_vector__interrupt void TIM3_UPD_OVF_IRQHandler (void){TIM3_SR = 0X00;//清除中断标志}⽤关键字#pragma vector=指出本中断处理函数指向的中断号,⽤关键字__interrupt作为函数的前缀,表⽰这是中断处理函数。

STM8在IAR环境下新建工程标准步骤详述

STM8在IAR环境下新建工程标准步骤详述

STM8在IAR环境下新建工程标准步骤详述
1.第一步,新建一个文件夹,起名为与你的工程相关,在该文件夹下建立Project 的目录。

2.进入Project目录,新建EWSTM8目录
3.打开IAR,Project->Create New Project
4.选择Empty project
5.将工程文件保存在XXX项目\Project\EWSTM8\
6.工程设置中为工程新建库、USER文件夹,用来添加工程中所需要的C程序源文件。

7.在工程设置的库路径中添加STM8库文件路径中的src内的源文件。

8.在Project路径内新建USER文件夹,并将从官网下载下来的库文件中的如下4个文件复制到该路径下。

9.添加完源程序后的工程如下:
选项。

11.设置编译器的路径,该路径是寻找*.h的路径。

如下为设置前:
12.下图为设置后。

$PROJ_DIR$指的是工程文件workspace的保存路径,即*.eew文件的路径。

..指点的是上一级路径,即父目录。

明白上述两点后,将STM8库文件的inc路径包含进去。

$PROJ_DIR$\..\..\Libraries\STM8L10x_StdPeriph_Driver\inc
$PROJ_DIR$\..\USER
13.至此,可以Ctrl+F7了,这是编译main.c。

个库函数有返回值但却没有return语句。

Bruno。

STM8S103串口示波器(IAR)

STM8S103串口示波器(IAR)
*/
}
INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
{
}
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
/* In order to detect unexpected events during development,
{
AD_Value=ADC1_GetBufferValue(0);
UART1_SendData8(0xA5 );
Delay(10000);
UART1_SendData8(AD_Value >> 8);
Delay(10000);
UART1_SendData8(0xAA);
ADC1_StartConversion();//开始转换
}
void CLK_Init(void)
{
CLK->CMSR =0xB4; //使能外置高速晶体振荡器
CLK->CKDIVR =0x00; //设置外部时钟分频
CLK->ECKR = 0X01; //使能外部时钟寄存器
Delay(10
INTERRUPT_HANDLER(ADC1_IRQHandler, 22)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
/* Includes ------------------------------------------------------------------*/

STM8S系统时钟应用(IAR)

STM8S系统时钟应用(IAR)

STM8S系统时钟应用(IAR)
STM8 上电运行时默认使用内部16M 的RC 振荡器经8 分频后的2M 时钟
频率作为系统时钟。

程序开始运行后可以通过设置相关寄存器来修改主时钟源,可以选择外部晶振作为主时钟源和CPU 时钟分频。

那么这里就选择比较简单
的操作,修改内部RC 时钟预分频器获得8M 系统时钟。

增加内部RC 时钟预
分频后的代码如下:
#i nclude #define LED1_FLASHPD_ODR_ODR3 =!PD_ODR_ODR3// LED 闪灯指示void delay(unsigned int count){while(count--);}void CLK_init(void){ CLK_CKDIVR = 0x08; // 16M 内部RC 经2 分频后系统时钟为8M}void GPIO_init(void){PD_DDR = 0x08;// 配置PD 端口的方向寄存器PD3 输出PD_CR1 = 0x08;// 设置PD3 为推挽输出}void init_devices(void){CLK_init(); GPIO_init();}void main( void ){init_devices();while(1){ delay(50000); LED1_FLASH;}}编译后运行一下看看,LED1 是不是闪得更快了
tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

IAR_for_STM8详细步骤

IAR_for_STM8详细步骤

IAR FOR STM8如何建立工程文件
在写程序之前先建立一个文件夹如:example文件夹;在example文件夹中再建立两个文件夹:STM8S_StdPeriph_Driver和Project.其中STM8S_StdPeriph_Driver文件夹中存放的是STM8库文件的library . Project文件夹存放的是工程文件(将库文件夹下的Project文件下STM8S_StdPeriph_Template中的main.c….h文件等COPY过来)。

准备工作结束。

下面开始就成工程的建立
1 .打开IAR for STM8,(这几不需要示范了吧?嘿嘿) 保存到之前的Project的文件夹下
2.在workspace中右键单击example增加Group 两个分别为FW_lib和User.
3.向FW_lib文件夹中添加库文件,库文件在之前建立的STM8S_StdPeriph_Driver文件夹下,添加的是src 文件夹下的,(具体添加哪个你也知道了,不必我多说),
4.向User文件夹下添加文件:Project文件夹下的.c和.h文件
5.此时添加的文件已经完毕,现在需要设置工程的属性了
书写模式如下图所示:
6.最后一步:进行程序的编译,更改程序中的错误。

自此建立工程结束,可以进行Main
函数的书写了。

以上哪有不足之处请多多指教。

嘿嘿!。

STM8的IAR开发环境搭建及DEBUG调试模式设置

STM8的IAR开发环境搭建及DEBUG调试模式设置

相关软件下载链接:/s/1dDrwSZB 1、双击运行IAR运行程序2、点击next3、选择“I accept the terms of the license agreement”并点击Next4、此处我们将需要填写License#5、解压下载的压缩包中的“IAR+KeyGen+”压缩包6、打开“IAR kegen说明.txt”文档可以看到如果要安装STM8的IAR开发环境我们需要用到“IAR kegen PartC.exe”这个软件7、打开它。

如果你使用的是win7或者win8操作系统,你需要右键“IAR kegen PartC.exe”这个软件并且选择“以管理员身份运行”选项来启动这个软件8、在软件的Product下拉框中选择“Embedded Workbench For STM8 v1.31”,点击“Get ID”按钮,复制“License number”粘贴到“License#”中并点击下一步,然后再将“License key”复制粘贴到安装程序的“License key”中,然后点击下一步9、选择“Complete”然后Next10、这里可以自行更改路径,然后选择next11、然后就一路next下去即可,IAR会同时将ST-LINK的驱动一并安装12、出现如下界面即安装成功1、创建一个工程,点击Project->Create New Project…2、这里创建一个c工程,点击ok3、给工程命名,这里我给工程命名为test4、复制库文件到工程目录下面,同时在工程目录文件下创建user文件夹,在user 文件夹下创建src文件夹和inc文件夹,分别用来存放自己写的*.c文件和*.h文件,把main.c文件放到src文件夹下(库文件下载链接:/web/en/catalog/tools/PF258009)5、打开IAR,右击你的工程->Add->Add Group添加lib组和src组,右键main.c 文件并移除,然后右键src重新添加user文件夹下的main.c文件6、将自己写的程序的*.c文件放在src中,将需要的库文件的*.c文件放在lib中,右击相应组->add->add files即可添加文件7、复制\STM8S_StdPeriph_Lib_V2.1.0\Project\STM8S_StdPeriph_Examples\GPIO\GPIO_Toggl e\main.c中的内容到工程中的main.c文件中8、右击你的工程Options->General Options->选择你单片机的型号9、这里我使用的是STM8S103F3P10、切换到C/C++ Complier->Preprocessor->Additional include directory: ( one per line)配置头文件路径,如图所示将库文件的inc路径以及自行创建的user中的inc 路径添加进来,“$PROJ_DIR$”表示工程路径11、切换到Debugger->Driver选择ST-Link->OK12、将\STM8S_StdPeriph_Lib_V2.1.0\Project\STM8S_StdPeriph_Examples\GPIO\GPIO_Toggl e文件夹下的stm8s_conf.h文件和stm8s_it.h文件复制到工程中user文件夹下的inc文件夹中,再将stm8s_it.c复制到src文件夹中13、然后选中工程并点击如图所示的Make按钮进行编译14、报错提示GPIOH没有定义,这里修改成如图所示#define LED_GPIO_PORT (GPIOB)#define LED_GPIO_PINS (GPIO_PIN_5)之后再编译可以看见main.c文件即可编译通过15、修改后继续编译如果出现非常多的关于未定义的错误,这个表示库文件中有些文件是你选择的芯片所不支持的功能16、右键那些无法编译通过的文件,点击Options,然后在弹出的窗口的左上角有个“Exclude from build”,勾选上就会忽略编译这些文件17、这时我们再次编译即可通过18、接下来我们点击Download and Debug按钮下载程序并进入Debug模式19、进入Debug模式之后点击Go按钮全速运行即可看见led闪烁了,当然前提是你的led灯是连接在PB5引脚上,如果不是,自行修改LED_GPIO_PORT和LED_GPIO_PINS引脚定义20、如果没有反应,拔掉ST-LINK,断电之后重新上电就可以看见led闪烁了。

IAR FOR STM8位域的定义和应用

IAR FOR STM8位域的定义和应用

IAR FOR STM8位域的定义和应用
在应用中,我们经常用到位操作,有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。

例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。

为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。

所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。

每个域有一个域名,允许在程序中按域名进行操作。

这样就可以把几个不同的对象用一个字节的二进制位域来表示。

这样即可以对字节操作,又可以对位操作。

下面举例说明位域的定义和应用。

本程序是基于IAR FOR STM8 写的
#include <iostm8s903k3.h>
typedef struct
{
union
{
struct
{
_Bool a :1;
_Bool b :1;
_Bool c :1;
_Bool d :1;
_Bool e :1;
}A;
unsigned char B;
};
}type1;
type1 mune;
void main()
{
mune.B=0x10;//字节操作
mune.A.a=1;//位操作
mune.A.b=!mune.A.b;
mune.A.b=0;
mune.A.d=1;
while(1);
}
仿真记录:。

eclipse_stm8_iar_stlink开发环境教程

eclipse_stm8_iar_stlink开发环境教程

IAR是除了ST公司官方工具外目前能比较好编译STM8芯片的开发环境,但是IAR的代码编辑工作做的很不友好,一直没有什么进步,但是他们提供eclipse的插件,说起eclipse用来查看、编写代码绝对比之以前有巨大的飞升,特别是当代码量大到一定程度后。

但是我看到有些人讲,像keil那样就行了,折腾是毫无意义的,说实话,我很反感有人有这样的想法,毕竟如果作为开发人员,特别是技术升级换代的速度很快的情况下,不思进取只会落后。

下面的内容不适合初学者,如果看不懂,可以直接放弃,首先要具备在IAR环境下开发过STM8的技能,如果之前用过eclipse就更好了首先需要准备以下软件1、eclipse(C++版本)2、Java环境(和eclipse的版本要匹配)3、IAR7.0以上(stm8版本,网上有和谐版本,自行搞定)4、ST Visual Programmer(官方自带的下载工具)5、XCOM V2.0.exe(串口工具,其他的也行,推荐用这个)准备的硬件1、st-linkV22、stm8s103F3开发板3、USB串口4、杜邦线等首先安装C++版本的eclipse,这个可以到网上去找教程,很多,这里就不介绍了再安装IAR(stm8版本),至于怎么和谐,自行百度,有钱的话推荐买正版之后安装STVP,这个不要钱,里面包含ST Visual Programmer和ST-LINK的驱动下面为eclipse安装插件,首先按照下面的图去下载插件,是一个zip的打包文件打开eclipse-》help-》install new software... ->add... ->Local... 再弹出的对话框里面选择刚才下载的zip文件,之后按照默认提示安装即可,中间有警告的话,请忽略,完成后会提示重启再打开eclipse,windows-》preferences,再弹出的对话框里面点IAR卡头的选项,填入IAR的安装路径,可以参考下图下面就可以导入之前的IAR工程了,file-》import,如图,找到之前的工程文件即可这种方式生成的工程,可以直接编译,但是并不推荐,可以直接新建工程,具体做法是file-》new-》C peoject,接下来就很直观了,如图填写好工程名字即可,下面进行选择芯片型号的操作,鼠标点中工程名字,再按alt+enter,弹出,如图再点击select...就可以选择了,里面的选项和IAR的差不多,可以自行领会之后就可以编写一个LED灯的示例工程了下面说生成HEX以及烧录的方法按照如图配置,可以生成hex烧录方法,先点击图标右边的小下拉箭头,选择external Tool...,弹出的对话框里面填入如下图的内容,其中locations: 里面的内容是STVP_CmdLine.exe的绝对地址,请按照自己计算机的实际情况填写,其他的内容,请自行领悟,不出意外,点击Run的话就能正常下载了,以后只需点击下载(如果下载错误,会提示错误的,在里面,如果没有内容,说明已经成功下载了)。

IAR for STM8新建工程模板

IAR for STM8新建工程模板

新建工程1、翻开软件,点击File->New->Workspace2、点击Project->Create New Project点击ok,选择工程文件夹,编辑工程名称如下列图点击保存3、右键工程名Add->Add Group,出现下列图点击OK此步骤添加文件夹,便于程序文件管理4、点击File->New->File5、另存为main.c文件〔File->Save As〕点击保存6、将main.c添加到user文件夹中,右键user->Add->Add〞main.c〞配置环境1、在工程右键鼠标,点击Options2、选择单片机型号,我使用的是STM8L152K4故做如下选择3、在C/C++ piler下的Preprocessor里输入$PROJ_DIR$$PROJ_DIR$/../user4、在Debugger里选择ST-LINK5、生成hex文件设置6、写入程序#include"iostm8l152k4.h"/***********************************************************************************入口参数:无****出口参数:无****函数备注:GPIO测试程序,PD4灌流方式连接LED,通过控制PD4输出电平,使LED 闪烁******************************************************************************/int main( void ){int i,j;PD_DDR_DDR4=1; //端口数据方向存放器,输出PD_CR1_C14=1; //端口控制存放器1,推挽输出PD_CR2_C24=0; //端口控制存放器2,输出速率2MHzwhile (1){PD_ODR_ODR4=1; //端口输出数据存放器,输出高电平for(i=0;i<100;i++)for(j=0;j<200;j++);PD_ODR_ODR4=0; //端口输出数据存放器,输出低电平for(i=0;i<100;i++)for(j=0;j<200;j++);}return 0;}7、编辑Project->Rbuild All填写文件名并保存编辑成功生成hex文件路径。

IAR STM8 24C02 24cxx 读写程序

IAR STM8 24C02 24cxx 读写程序
asm("nop"); /*5.0us*/ asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
asm("nop");
asm("nop");
asm("nop");
I2C_SCL=0;
//只有在低电平时,才允许修改 SDA 数据
F_delay_5us_24Cxx();
I2C_SDA=1;
//Start 是在 SCL 为高时,SDA 为下降沿
F_delay_5us_24Cxx();
I2C_SCL=1;
F_delay_5us_24Cxx();
I2C_SDA=0;
/*发送起始信号*/
else
date &= 0xfe;
I2C_SCL=0;
F_delay_5us_24Cxx();
}
return date;
}
/*==============================================================================
=
将数据写入 24Cxx 里面
F_delay_5us_24Cxx();
for(uchar i=0;i<8;i++) /*要传送的数据长度为 8 位*/
{
I2C_SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/
F_delay_5us_24Cxx();

IAR FOR STM8例程

IAR FOR STM8例程

IAR+STM8——EXTI外部中断控制寄存器2013-03-21 23:23:15| 分类:STM8|举报|字号订阅这块三合一的开发板上有且只有一个按键,没办法,就拿这唯一的按键来用吧。

吸取前面UART3的教训,先看开发板的原理图吧。

这个按键被接到了STM8S207SB的PD7上,已做了上拉处理。

为了简单明了,还是点LED1吧。

按一下LED1亮,再按一下LED1灭。

好了,写程序吧。

#i nclude <iostm8s207sb.h>#define LED1_FLASH PD_ODR_ODR3 = !PD_ODR_ODR3 // 开发板上的LED1接在PD3上void GPIO_init(void){PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出PD_CR1 = 0x08; // 设置PD3为推挽输出PD_CR2 = 0x80; // 使能PD7外部中断}void EXTI_init(void){EXTI_CR1 = 0x80; // PD口下降沿触发中断}#pragma vector=0x02 // 这里很关键!看下面说明。

__interrupt void EXTI_PD7_TLI(void){LED1_FLASH;}void init_devices(void){asm("sim"); // 关全局中断GPIO_init();EXTI_init();asm("rim"); // 开全局中断}void main( void ){init_devices();// 主循环里没有程序需要执行while(1);}这里着重要说明的一点是PD7的外部中断程序。

看了一下芯片手册,PD口外部中断EXTI3的中断向量号是6,想当然,又是想当然,按IAR的规矩中断向量要加2,就这样写#pragma vector=0x08,结果就是按下按键,程序没响应了,一直在中断里不出来。

STM8在IAR环境下的C语言开发

STM8在IAR环境下的C语言开发

STM8单片机在IAR环境下的C语言开发1、头文件搜索路径设置在工程管理窗口按右键,选择option,打开选项设置窗口如下选择C/C++ compiler选项,然后选择Preprocssor标签,在《Additional include directories 下输入要包含的搜索路径,这样在程序编译时,编译器会自动到该目录下搜索头文件。

2、单片机类型的选择在工程管理窗口按右键选择option,选择<General Options>选项,然后再Target中选择相应的单片机型号。

3、Printf函数的使用要使用printf函数,需要在工程管理窗口按右键选择《option》,选择<General Options>选项,然后选择《library Configuration》标签,在《library》中选择Full,如下图所示。

对于程序空间非常小的单片机,如STM8S003只有8K的程序空间,如果使用全功能的printf函数,则程序编译后代码空间不足,此时应不使用printf或者使用Tiny版本的printf,选择Library Options标签,选择Printf formatter 为tiny。

为了能够使用printf,在程序中需要增加如下代码#include "stdio.h"//------------------------------------------------------------------------------// 使用Printf//------------------------------------------------------------------------------// 又有STM8S003只有8K的内存,使用完整的printf则程序空间不足,必须使用tiny的printf// 因此在工程的选项中Library configuration选择Full,在Library option 中选择tiny#ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endifPUTCHAR_PROTOTYPE{//发送数据代码UART1->DR = ch;while(UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);return ch;}4、查看程序编译后的代码大小在工程的目录下有《Debug》和《Release》目录,目中中的《List》目录中有个扩展名为map的文件,文件名为工程名,打开该文件,可以看到程序编译后的代码大小。

STM8在IAR上工程的建立

STM8在IAR上工程的建立

IAR建立STM8工程示例
一、文件夹配置:
1、先建一个工程文件夹名命为“工程1”。

2、将STM8的库文件“FWLib”(只保留 library文件夹,其他可以删去。

)、“stm8s_conf”复制入“工程1”文件夹
中。

二、工程建立及配置:
1、打开IAR软件后新建一个工程:Projec t→Create New Project→选C文件之后将其保存在上面所建的文件夹“工程1”中,并命名为“测试程序.ewp”。

2、右键“Options…”进入软件选配
3、在C/C++ Compiler→Preprocessor中填入下图所示(在某文件夹中找inc文件)
4、在Output Converter →Output 如下图所示配置
三、程序及库的导入
1、将库文件夹中的例子“FWLib\examples\TIM2\TIM2_PWM_FrequencyConfiguration”复制入main.c中
2、右键“Options…”进入软件选配→Add→Add Files,将此TIM2例子所用到的库文件“.C”文件添加进去。

用到TIM2,故要
添加进去
重点提示:
1、“stm8s_conf”文件要根据你所用到的库模块来选配。

比喻你用到TIM2,在“stm8s_conf”里面就要打开TIM2。

2、修改“stm8s_conf”的方法是先将其只读属性去掉,然后直接修改后保存。

iar编写stm8跑马灯

iar编写stm8跑马灯

iar编写stm8跑马灯STM8是意法半导体(STMicroelectronics)推出的一款8位微控制器,被广泛应用于各种嵌入式系统中。

本文将以STM8为基础,编写一个简单的跑马灯程序。

跑马灯是一种常见的灯光效果,通过控制多个LED灯的亮灭来模拟跑马灯的效果。

通过编写STM8跑马灯程序,我们可以学习到如何使用STM8的GPIO功能以及控制LED 的原理。

我们需要准备一块STM8开发板、若干个LED灯和适配器等硬件设备。

接下来,我们将通过iar集成开发环境来编写STM8跑马灯程序。

1. 初始化引脚:首先,我们需要将LED连接到STM8开发板上的相应引脚。

在STM8中,每个引脚都有一个对应的寄存器用于控制它的状态。

我们需要设置这些寄存器来初始化引脚,并使其工作在输出模式。

2. 编写跑马灯程序:在STM8中,我们可以通过修改引脚寄存器来控制LED的亮灭。

为了实现跑马灯效果,我们可以通过循环遍历每个LED,并依次点亮或熄灭它们。

具体实现的代码如下:```#include <stm8s.h>#define LED_PORT GPIOA#define LED_PIN_1 GPIO_PIN_1#define LED_PIN_2 GPIO_PIN_2#define LED_PIN_3 GPIO_PIN_3#define LED_PIN_4 GPIO_PIN_4void delay(uint32_t n){while(n--);}void main(){GPIO_Init(LED_PORT, LED_PIN_1 | LED_PIN_2 | LED_PIN_3 | LED_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);while(1){GPIO_WriteHigh(LED_PORT, LED_PIN_1);delay(100000);GPIO_WriteLow(LED_PORT, LED_PIN_1);GPIO_WriteHigh(LED_PORT, LED_PIN_2);delay(100000);GPIO_WriteLow(LED_PORT, LED_PIN_2);GPIO_WriteHigh(LED_PORT, LED_PIN_3);delay(100000);GPIO_WriteLow(LED_PORT, LED_PIN_3);GPIO_WriteHigh(LED_PORT, LED_PIN_4);delay(100000);GPIO_WriteLow(LED_PORT, LED_PIN_4);}}```在这段代码中,我们首先定义了LED连接到的引脚,然后在主函数中初始化这些引脚,并通过循环遍历的方式控制LED的亮灭。

IAR for stm8平台 按键查询 实验程序

IAR for stm8平台 按键查询 实验程序

93 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
94 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
83 * @version V2.0.0
84 * @date 25-February-2011
85 * @brief This file is used to configure the Library.
86 ******************************************************************************
32 #define u8 uint8_t
33 #define u16 uint16_t
34 #define u32 uint32_t
35 #define EnableInterrupt __enable_interrupt()
36 #endif
37
38
39 //"led.h" 头文件
40 /******************** (C) COPYRIGHT 2012 青风电子 ***************************
98 */
99
100 /* Define to prevent recursive inclusion -------------------------------------*/
67 void LED2_Open(void);
68 void LED2_Close(void);

IAR EWSTM8工程创建

IAR EWSTM8工程创建

IAR EWSTM8工程创建1、File\New\Workspace2、Project\Create New Project选择Tool chain(只有一个,不选也是它^-^)、再选语言模板啦,偶选的就是C 。

(俺不会Asm ,C++会但不敢用)接着只能选OK 了(当然你要选Cancel 也行,以下内容是选OK 时出现的)。

输入工程名,再选保存就OK 了(没选取消,不知结果如何,同学们可以去试试)。

结果来了,显示如下:U n R e g i s t er ed3、接着啊,选工程的option ,目的就是选择器件啊、调试工具之类的(当然什么优化啊、预编译选项这些需要用到的东东都在里面)。

是马还是羊都拉出来给同学们看看: 选器件(为了速度或Size 的同学们可以看看Code 及Data 的配置,俺是不懂,知道的同学不防简明扼要地总结一哈,要是能赐给静默一份,那偶在这先谢谢啦…)、再来选DEBUG 工具(STICE 可不是偶这种穷人用的,用得起也不用,实用加现实主义,顺便顶一下:ST-LINK 真的很好用――JTAG 、SWD 、SWIM 都有、就是只支持ST 的一些流Un Re gi st er ed行器件。

)当然要来个预编译的配置,要不就找不到头文件在哪了。

Un Re gi st er ed4、保存Workpace给Workspace 起个名(俺起的这名太没创意了,就是给俺儿子取狗蛋的名一样)。

按保存就OK 了。

5、编译编译,通过了(高兴一把,看看一个错误及Warning 都没有,真好!这件事说明:事不能做多了、事做的越多越容易出错。

做项目也是一样,能用简单的方法实现就用简单的去做,在性能满足要求的情况下、可靠性比花哨重要的级别不是在一个数量级上)Un Re gi st er ed6、修改下代码,在评估板上跑跑。

(注意要把类似stm8l15x_conf.h 的文件要拷到工程目录)再上调试界面:Un Re g i st e r ed。

STM8教程-第五章 熟悉IAR开发环境

STM8教程-第五章 熟悉IAR开发环境

第五章熟悉IAR开发环境IAR Systems 推出开发工具“STM8 系列嵌入式设计工作台”(EWSTM8),支持8 位微控制器市场主流的STM8(STM8A,STM8L,STM8S)系列产品。

IAR EWSTM8 嵌入式设计工作台提供一整套开发工具,包括一个项目管理器、编辑器和项目创建工具(C 语言编译器和链接器)。

该工作台还为开发人员提供调试功能,可以连接意法半导体价格低廉的在线调试器ST-LINK 以及先进的高端仿真器STice。

下面向读者详细介绍IAR 的使用方法,希望读者能够迅速熟悉和掌握IAR。

5.1 IAR For STM8 的下载以及安装IAR For STM8 可以在IAR 的官网中下载,现在提供两种版本,一是免费的8K 受限制版本,另一个是评估板的30 天免费的版本。

可以在以下网址下载:/en/Products/IAR-Embedded-Workbench/STMicroelectronics-STM8/ 安装完成之后,运行IAR 集成开发环境,其界面如图所示:5.2 使用IAR 创建C 语言项目5.2.1 新建a)创建一个Workspace首先,创建一个Workspace。

选择菜单File>New>Workspaceb)创建一个Project1、创建一个新工程,选择Project>Create New Project,创建新工程的对话框,如下图所示:2、Tool chain 默认是STM8 Series。

无需再选择3、在Project templates 中选择C 或者其它4、在弹出Save As 对话框,选择Project 保存的路径,并输入Project 的名字。

在Workspace 窗口中,显示如下:有Debug 和Release 两个配置,默认配置是Debug。

5、在添加文件到工程之前,先保存Workspace。

选择File>Save>Workspace,指定要保持的路径,并输入Workspace 的名字。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ADC1_StartConversion();//开始转换
}
void CLK_Init(void)
{
CLK->CMSR =0xB4; //使能外置高速晶体振荡器
CLK->CKDIVR =0x00; //设置外部时钟分频
CLK->ECKR = 0X01; //使能外部时钟寄存器
{
/* Decrement nCount value */
while (nCount != 0)
{
nCount--;
}
}
/* Private defines -----------------------------------------------------------*/
*/
}
INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
{
}
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
/* In order to detect unexpected events during development,
{
AD_Value=ADC1_GetBufferValue(0);
UART1_SendData8(0xA5 );
Delay(10000);
UART1_SendData8(AD_Value >> 8);
Delay(10000);
UART1_SendData8(0xAA);
}
void main(void)
{
//uint16_t zq;
uint8_t n;
CLK_Init();
ADC_Init();
Init_UART1();
enableInterrupts();
while (1)
{
for(n=0;n<100;n++)
/* Infinite loop */
while (1)
{
}
}
#endif
it is recommended to set a breakpoint on the following instruction.
*/
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
/**
******************************************************************************
* 线接法:
* USB-TTL串口线的5V正负极接STM8的电源端口
* 如果STM8是开发板,而且带有电源,只需要接串口线的负极
void Init_UART1(void)
{
UART1_DeInit();
UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
ADC1_ScanModeCmd(ENABLE);//启用扫描模式
ADC1_DataBufferCmd(ENABLE);//启用缓存寄存器存储数据
ADC1_ITConfig(ADC1_IT_EOCIE,DISABLE);//关闭中断功能
ADC1_Cmd(ENABLE);//启用ADC1
*/
/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"
uint16_t i,AD_Value;
void Delay(uint16_t nCount)
Delay(10000);
}
}
}
INTERRUPT_HANDLER(ADC1_IRQHandler, 22)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
* @retval : None
*/
void assert_failed(u8* file, u32 line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* 串口线的TX接STM8S103的TIM1_C3的UART1_TX 即30脚
* 因为芯片不同,脚位可能会有所不同,请具体查看芯片手册
* 主要计算程序在中断里,stm8s_it.c 第238行
******************************************************************************
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
//UART1_Cmd(ENABLE);
}
void ADC_Init(void)
{
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_LEFT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE);
相关文档
最新文档