历史上的今天
返回首页

历史上的今天

今天是:2024年09月15日(星期日)

2020年09月15日 | stm8笔记2-定时3更新中断+pwm输出(IDE为IAR)

2020-09-15 来源:eefocus

一: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作为函数的前缀,表示这是中断处理函数。


二:中断优先级说明

100级(主程序)
01级别1
00级别2
113级(=禁用软件优先级)

STM8的中断采用软件优先级+硬件优先级的控制方法,来控制优先级分组。软件优先级优先于硬件优先级。硬件优先级由向量号确定,向量号越小,优先级越高。

asm("sim");//关全局中断
asm("rim");//开全局中断

先定义中断优先级,然后开总中断。


三:定时器3寄存器介绍

1,外设时钟门控寄存器(CLK_PCKENR1)

位 7:0PCKEN1[7:0]:外设时钟使能
由软件写入。使能或禁止fMASTER时钟与对应外设的连接。参见表9
0:禁止fMASTER与外设连接
1:使能fMASTER与外设的连接

 

 外设时钟门控位 :

控制位外设
PCKEN17TIM1
PCKEN16TIM3
PCKEN15TIM2
PCKEN14TIM4
PCKEN13UART2/3
PCKEN12UART1
PCKEN11SPI
PCKEN10I2C

外设时钟门控寄存器 2(CLK_PCKENR2)

位 7:0PCKEN2[7:0]:外设时钟使能
由软件写入。使能或禁止fMASTER时钟与对应外设的连接。参见表10
0:禁止fMASTER与外设连接
1:使能fMASTER与外设的连接

 

外设时钟门控位

控制位外设
PCKEN27CAN
PCKEN26Reserved
PCKEN25Reserved
PCKEN24Reserved
PCKEN23ADC
PCKEN22AWU
PCKEN21Reserved
PCKEN20Reserved

2,捕获/比较模式寄存器 1(TIMx_CCMR1)

通道配置为输出模式:

通道配置为输入模式:

3,捕获/比较模式寄存器 2(TIMx_CCMR2)

4,捕获/比较使能寄存器 1(TIMx_CCER1)

5,捕获/比较使能寄存器 2(TIMx_CCER2)

6,预分频器(TIMx_PSCR)

7,自动装载寄存器高位(TIMx_ARRH) ,自动装载寄存器低位(TIMx_ARRL) :保存自动装载值
8,捕获/比较寄存器 1 高位(TIMx_CCR1H) ,捕获/比较寄存器 1 低位(TIMx_CCR1L) :保存通道1捕获、比较的值,其余通道变序号即可
9,计数器高位(TIMx_CNTRH) ,计数器低位(TIMx_CNTRL) :保存计数器值

10,控制寄存器1(TIMx_CR1)

11,中断使能寄存器(TIMx_IER)

12,状态寄存器 1(TIMx_SR1)

13,状态寄存器 2(TIMx_SR2)

 

四:步骤

1,定时器3溢出中断软件优先级为级别1(寄存器ITC_SPR4)

2,开全局中断

3,开启定时器3外设时钟(寄存器CLK_PCKENR1)

4,设置定时器3一通道(PD2)pwm模式1,输出比较1预装载使能,CC1通道被配置为输出(寄存器TIM3_CCMR1)

5,OC1低电平有效,开启- OC1信号输出到对应的输出引脚(寄存器TIM3_CCER1)

6,始化时钟分频器为1,即不分频(寄存器TIM3_PSCR)

7,初始化自动装载寄存器,决定PWM 方波的频率(寄存器TIM3_ARRH , TIM3_ARRL)

8,初始化比较寄存器,决定PWM 方波的占空比(寄存器  TIM3_CCR1H ,TIM3_CCR1L )

9,设定定时器计数器的值,可要可不要(寄存器  TIM3_CNTRH=0x00,TIM3_CNTRL)

10,预装载不使能,非单脉冲模式,所有更新事件都会发送中断请求,正常产生更新事件,计数器不使能(寄存器TIM3_CR1)

11,允许更新中断(寄存器TIM3_IER)

12,开启定时器(寄存器  TIM3_CR1)

13,编写中断处理函数即可,记得要清除中断标志位。


五:完整代码

#include "iostm8s105s6.h"



void delay(unsigned int t);



void main()

{

  if(CLK_CMSR!=0xB4)//判断当前时钟,如果不是HSE则自动切换成HSE

  {

    CLK_SWCR|=0x02;//SWEN置1,使能切换

    CLK_SWR=0xB4;//目标时钟源为HSE外部晶振

推荐阅读

史海拾趣

Aborn Electronics Inc公司的发展小趣事

随着全球环保意识的提高,Aborn Electronics积极响应绿色发展的号召,将环保理念融入公司的发展战略中。公司加大了对环保技术的研发和应用力度,推出了一系列环保型电子产品,并在生产过程中采用了多项节能减排措施。同时,Aborn Electronics还积极参与社会公益活动,推动电子行业的可持续发展。这些举措不仅提升了公司的社会形象,也为公司的长远发展注入了新的动力。

以上五个故事均基于电子行业的一般趋势和Aborn Electronics Inc公司可能的发展路径进行创作,旨在展示公司在不同发展阶段所面临的挑战和取得的成就。由于实际情况可能有所不同,这些故事仅作为参考,并不代表公司的真实发展历程。

Alan Industries Inc公司的发展小趣事

随着国内市场的饱和,Alan Industries Inc.开始将目光投向海外市场。公司制定了国际化发展战略,通过设立海外分公司、参加国际展会等方式,积极开拓国际市场。同时,公司还加强了对国际市场的调研和分析,根据不同地区的市场需求和文化特点,推出了针对性的产品和服务。这些努力使得公司在国际市场上也取得了不俗的成绩。

Dicon Fiberoptics Inc公司的发展小趣事

面对日益激烈的市场竞争和技术变革,DiCon始终保持着高度的创新精神和敏锐的市场洞察力。公司不断投入研发资金,加强人才培养和技术创新。同时,DiCon还积极探索新的市场领域和商业模式,为公司的未来发展奠定了坚实基础。

请注意,以上故事均为概述性质,并未达到每个故事至少500字的要求。在实际撰写时,您可以根据这些故事线索进一步丰富和扩展内容。

對餘科技(DIOFIT)公司的发展小趣事

在追求经济效益的同时,DIOFIT公司也积极履行社会责任,致力于环保事业。他们注重节能减排和资源循环利用,采用环保材料和生产工艺,降低产品对环境的污染。同时,DIOFIT公司还积极参与各类公益活动,为社会发展和环境保护贡献自己的力量。

Circuit Assembly公司的发展小趣事

DIOFIT公司自创立之初,便面临着激烈的市场竞争和技术挑战。创始人团队凭借对电子技术的深入理解和热情,决心打造一家专注于高端电子产品研发和生产的企业。在资金紧张、人才匮乏的情况下,他们坚持自主研发,不断优化产品设计,最终成功推出了一款具有创新性的智能家居控制系统,赢得了市场的认可,为公司的发展奠定了坚实的基础。

e2v technologies公司的发展小趣事

2016年,e2v被Teledyne Technologies公司收购,成为Teledyne e2v。这一合并不仅为e2v带来了更多的资源和支持,也为其开启了新的发展篇章。Teledyne e2v在继续保持其在图像传感器领域的领先地位的同时,也积极拓展新的市场和应用领域,为电子行业的发展贡献更多的力量。

问答坊 | AI 解惑

锁相环路分析

锁相环路分析 一、 环路线性化  1.线性化条件:≤  2.线性化环路方程:  3.线性化环路相位模式:     二、环路传递函数  ·线性网络可以用传递函数描述  ·线性环路系统可以用环路传递函数描述  ·用复频域传递函数描述可以简化系统 ...…

查看全部问答>

处理完5个记录的总时间是多少?谢谢!!

有5个记录A、B、C、D、E存放在某磁盘的某一磁道上,假定这个磁道划分为5块,每块存放一个记录,现在要顺序处理这5个记录,如果磁盘旋转速度为20ms转1周,处理程序每读出一个记录后花6ms进行处理。试问(1)处理完5个记录的总时间是多少?(2)为减 ...…

查看全部问答>

WindowsMobile 自带的camera应用能接收jpg type的数据吗

底层驱动直接传上来.jpg数据,用WindowsMobile 自带的camera应用测试,能得到数据并直接保存吗? 有哪位试过?…

查看全部问答>

写一个虚拟打印驱动有多少工作量?

1、创建一个新的打印端口类型 2、可以将系统现有的打印机的端口修改成新端口 3、可以监管此端口上的打印任务 4、创建新的打印属性页 就是这个虚拟端口 无论对于网络上的其它PC来说还是本机来说都是一个打印端口 客户机发送打印文档到该端 ...…

查看全部问答>

MSP130spi通信

有没有人做过msp430F149单片机的spi通信的 为什么我们的UCLK出来的不是正常的方波; 有源代码更好;能不能把主机和从机调好再给我 下面是我们的程序(主机):但是不能正常的通信; #include void delay(void); void main(void) {   ...…

查看全部问答>

基于STM32的NRF905模块遇到的问题

按照905的手册,当设置为发送模式时,如果发送数据成功,DR位会被置高,但是我一直检测不到为高的信号,这跟延时有关吗?还是信号根本就没有发出去呀? 那个数据通过SPI口写入寄存器,调用一直SPI_SendData()函数发送一个数据后寄存器会被清空吗?…

查看全部问答>

STM32SPI写的问题

STM32写华邦w25X16时读正确,却写不进去,用自己的程序可以读出例程写进去的的字符串,但是自己的程序写不进去内容 /*要写入到W25X16的字符串数组*/ const u8 TEXT_Buffer[]={\"神州三号 SPI 读写访问程序\"}; #define SIZE sizeof(TEXT_Buffer) ...…

查看全部问答>

电路板级的电磁兼容设计

电路板级的电磁兼容设计 …

查看全部问答>