iar for stm8初学总结

由于最近要用到stm8,所以这几天就开始学习stm8,但发现网上资料太少,所以在这里我就把一些对stm8的疑惑解答后的知识整理了一下,也算是做了一个小总结


对于开发环境,有ST TOOLSET 、 COSMIC 和IAR 这三个常用的,因为我用过IAR开发stm32,所以IAR是我的首选,虽然网上很多人说IAR for STM8代码的优化不如COSMIC。

看了一下开发环境的配置,不是很复杂,我把这三个工具的配置方法发上来供初学者下载查看:

http://download.csdn.net/detail/hzt12345hf/7666017

说一下IAR使用的注意事项,基本的配置环境就不说了,

iar和cosmic所使用的头文件名字有所不同,iar用的都是像如“iostm8s103k3.h“的形式。

关于中断向量怎么用,声明一个中断程序格式如下:


#pragma vector=0x02
__interrupt void interrupt_handler(void)
{
	//你的代码
}

#pragma vector =0x02 :
等号前面的是 IAR 中断向量指令,等号后面的数字代表中断向量编号,中断向量编号可以自己算也可以从你的头文件里面找,基本上都放在头文件倒数的位置,大约4000行的位置,自己算的话就是 (中断向量地址 - 0x0008000)/4 就是中断向量号了。


iar for stm8初学总结_第1张图片



由于我从51单片机转过来的,所以对stm32/8的库函数不是很喜欢,因为懂的人一看就知道是什么,不懂得看着真心麻烦,虽然很通用但降低了可读性(个人感觉),所以stm8果断放弃库函数,和51一样写寄存器。

当然,在51里,对一个io口置1则为高电平,置0则为低电平,所以我也很好奇stm8是否有这个功能,由于资料太少,找了很久也没找到,还是阿莫电子的朋友一语中的,就是使用形如PC_ODR_ODR0的宏定义,在头文件里是这么定义的:


iar for stm8初学总结_第2张图片


这就好像stm32里利用结构体,通过将地址转换为结构体的方式使得寄存器可以通过访问结构体的变量来进行寄存器的访问,提供给大家几个网址,也是讨论stm8利用位控制,其中还有别的方式,另外哪种方式比较适合自定义,利用的是共用体访问:

http://www.amobbs.com/forum.php?mod=viewthread&tid=5588812&pid=7705619&page=1&extra=page%3D1#pid7705619

http://bbs.21ic.com/icview-556542-1-1.html


再说一下定时器,由于本人也是刚解除stm8,所以很有些东西不够透彻,只是因为stm8的定时器功能太过强大。

最简单定时器初始化套路基本如下:

void Init_TIM1(void)
{
	
	
	TIM1_CR1 = 0x00;  		//向上的计数方向,中断计数不停
	TIM1_IER = 0x01;		//允许更新中断
	TIM1_PSCRH = 0x3e;  		//进行16000分频
	TIM1_PSCRL = 0x80;
	TIM1_ARRH = 0x03;		//1000个周期产生更新中断 16 / 16000 * 1000 = 1
	TIM1_ARRL = 0xe8;


	TIM1_CR1 |=0x01;		//使能中断
	
}


先是使能TIMx_IER的第一位,使定时器可以产生中断,同时设置计数方向,然后设置定时器的分频器,频率为 主时钟的频率/分频数 ,16位高级定时器 用TIMx_PSCRH和TIMx_PSCRL 共同决定分频数,16为通用定时器利用TIMx_PSCR的前4位作为2的幂,让 主时钟频率/2^TIMx_PSCR 计算出频率,8位基本定时器 同16位通用定时器大体类似,只不过用的是TIMx_PSCR的前3位,然后设置溢出值,16通用和16高级定时器都有TIMx_ARRH和TIMx_ARRL两个寄存器来记录溢出值,而且赋值是必须先给TIMx_ARRH赋值然后再给TIMx_ARRL赋值,否则不能自动重载计数值。然后使能中断。


最重要的一点也是最容易忘了的一点是还要打开总中断,语句是汇编语言:

	asm("rim");/* enable interrupts */

关闭总中断的是
	asm("sim");/* disable interrupts */

我还发现一个问题,像如STM8s003k3 这种型号的单片机,在它的头文件里是没有TIM4_SR1这个寄存器的,而是TIM4_SR,所以如果要清除TIM4的中断标志,要使用TIM4_SR = 0x00来实现

暂时就说到这,过后还有补充。提供一些资料给大家下载:

STM8 TIM 定时器使用要点:http://download.csdn.net/detail/hzt12345hf/7666019

STM8 中文DATASHEET:http://download.csdn.net/detail/hzt12345hf/7666021

STM8的C语言编程: http://download.csdn.net/detail/hzt12345hf/7666025

stm8示例程序: http://download.csdn.net/detail/hzt12345hf/7666027


你可能感兴趣的:(嵌入式软件)