历史上的今天
返回首页

历史上的今天

今天是:2025年03月15日(星期六)

2020年03月15日 | STVD TIM4 8位中断定时器

2020-03-15 来源:eefocus

中断定时:


1.在main.c中写下中断函数


@far @interrupt void TIM4_UPD_OVF_IRQHandler(void)

{

  TIM4_SR=0x00;//清楚更新标志

  PD_ODR^=0x0f;

}

添加声明:void TIM4_UPD_OVF_IRQHandler(void);


出现错误“#error cpstm8 main.c:40(48) space attribute conflict“


将“@near @interrupt void TIM4_UPD_OVF_IRQHandler(void)”改为“@far@interrupt void TIM4_UPD_OVF_IRQHandler(void)”


2.在stm8_interrupt_vector.c文件中在“extern void _stext();”下面添加声明:extern void TIM4_UPD_OVF_IRQHandler(void);


更改中断向量表为: {0x82, (interrupt_handler_t)TIM4_UPD_OVF_IRQHandler}, /* irq23 */


在中断向量表中若不添加(interrupt_handler_t),将会出现“#error cpstm8 stm8_interrupt_vector.c:48(8+23) invalid pointer initializer”的错误


3,中断函数既可以放在main.c中也可以放在stm8_interrupt_vector.c中。


/********************************************************************************************************************************************************


/* MAIN.C file

 * 

 * Copyright (c) 2002-2005 STMicroelectronics

 */


//中断方式的8位定时器

//周期是30.63ms

#include "stm8s103f.h"

main()

{

 //IO口的初始化

 PD_DDR=0x0f;

 PD_CR1=0x0f;

 PD_CR2=0x00;

 PD_ODR=0x00;//设置pd0、pd1、pd2、pd3的输出为0

 //定时器4的初始化

 TIM4_IER = 0x00; // 禁止中断

 TIM4_EGR = 0x01; // 允许产生更新事件

 TIM4_PSCR = 0x07; // 计数器时钟=主时钟/128=2MHZ/128

          // 相当于计数器周期为64us

 TIM4_ARR = 255; // 设定重装载时的寄存器值,255是最大值

 TIM4_CNTR = 255;// 设定计数器的初值

         // 定时周期=(ARR+1)*64=30.63mS

 TIM4_CR1 = 0x01;// b0 = 1,允许计数器工作

         // b1 = 0,允许更新

         // 设置控制器,启动定时器

 TIM4_IER = 0x01;// 允许更新中断

 _asm("rim"); // 允许CPU全局中断

 //进入无限循环

 while (1)

 {

 

 }

}


 /********************************************************************************************************************************************************


stm8_interrupt_vector.c


/* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices

 * Copyright (c) 2007 STMicroelectronics

 */

 #include "stm8s103f.h"

typedef void @far (*interrupt_handler_t)(void);


struct interrupt_vector {

 unsigned char interrupt_instruction;

 interrupt_handler_t interrupt_handler;

};


@far @interrupt void NonHandledInterrupt (void)

{

 /* in order to detect unexpected events during development, 

    it is recommended to set a breakpoint on the following instruction

 */

 return;

}


extern void _stext();     /* startup routine */

void TIM4_UPD_OVF_IRQHandler(void);


//函数功能:定时器4的中断服务程序

//输入参数:无

//输出参数:无

//返回值:无

@near @interrupt void TIM4_UPD_OVF_IRQHandler(void)

{

  TIM4_SR=0x00;//清楚更新标志

  PD_ODR^=0x0f;

}

struct interrupt_vector const _vectab[] = {

 {0x82, (interrupt_handler_t)_stext}, /* reset */

 {0x82, NonHandledInterrupt}, /* trap  */

 {0x82, NonHandledInterrupt}, /* irq0  */

 {0x82, NonHandledInterrupt}, /* irq1  */

 {0x82, NonHandledInterrupt}, /* irq2  */

 {0x82, NonHandledInterrupt}, /* irq3  */

 {0x82, NonHandledInterrupt}, /* irq4  */

 {0x82, NonHandledInterrupt}, /* irq5  */

 {0x82, NonHandledInterrupt}, /* irq6  */

 {0x82, NonHandledInterrupt}, /* irq7  */

 {0x82, NonHandledInterrupt}, /* irq8  */

 {0x82, NonHandledInterrupt}, /* irq9  */

 {0x82, NonHandledInterrupt}, /* irq10 */

 {0x82, NonHandledInterrupt}, /* irq11 */

 {0x82, NonHandledInterrupt}, /* irq12 */

 {0x82, NonHandledInterrupt}, /* irq13 */

 {0x82, NonHandledInterrupt}, /* irq14 */

 {0x82, NonHandledInterrupt}, /* irq15 */

 {0x82, NonHandledInterrupt}, /* irq16 */

 {0x82, NonHandledInterrupt}, /* irq17 */

 {0x82, NonHandledInterrupt}, /* irq18 */

 {0x82, NonHandledInterrupt}, /* irq19 */

 {0x82, NonHandledInterrupt}, /* irq20 */

 {0x82, NonHandledInterrupt}, /* irq21 */

 {0x82, NonHandledInterrupt}, /* irq22 */

 {0x82, (interrupt_handler_t)TIM4_UPD_OVF_IRQHandler}, /* irq23 */

 {0x82, NonHandledInterrupt}, /* irq24 */

 {0x82, NonHandledInterrupt}, /* irq25 */

 {0x82, NonHandledInterrupt}, /* irq26 */

 {0x82, NonHandledInterrupt}, /* irq27 */

 {0x82, NonHandledInterrupt}, /* irq28 */

 {0x82, NonHandledInterrupt}, /* irq29 */

};

推荐阅读

史海拾趣

Block USA Inc.公司的发展小趣事

在发展过程中,Block USA Inc.也面临着来自竞争对手和行业变化的挑战。然而,公司始终保持着创新精神,不断调整和优化产品与服务,以适应市场的变化。例如,面对数据安全和隐私保护的日益严格要求,Block加强了其数据保护措施,并公开承认了数据泄露事件并积极采取措施进行补救。同时,公司还继续拓展其业务边界,探索新的增长点,以保持其在电子行业中的竞争优势。

这些故事只是Block USA Inc.在电子行业发展历程中的一部分,它们展示了公司如何通过不断创新和拓展业务领域,逐步成为一家具有影响力的综合性电子企业。然而,随着市场的不断变化和竞争的加剧,Block仍需保持警惕并持续努力,以应对未来的挑战和机遇。

上海超致公司的发展小趣事

上海超致始终重视品牌建设,公司拥有一系列注册商标和专利信息,这些知识产权的拥有为公司树立了良好的品牌形象。同时,上海超致还积极开展国际合作,与国际知名企业建立了长期合作关系,共同开发新产品、拓展新市场。这些国际合作不仅提升了公司的技术水平,也帮助公司打开了国际市场的大门。

Anderson Electronics Inc公司的发展小趣事

随着公司规模的扩大和产品线的丰富,Anderson Electronics Inc公司开始积极拓展市场。公司通过与各大电子产品零售商建立合作关系,将产品销往全国各地。同时,公司还加大了品牌宣传力度,通过广告、展会等多种渠道提升品牌知名度和影响力。在市场拓展的过程中,公司始终坚持质量第一的原则,以优质的产品和服务赢得了客户的信赖和支持。

ABCircuits公司的发展小趣事

随着公司的不断发展,ABCircuits意识到单打独斗难以应对日益激烈的市场竞争。于是,公司开始积极寻求与其他企业的战略合作。通过与上下游企业的紧密合作,ABCircuits不仅获得了稳定的供应链支持,还成功打开了国际市场的大门。这些合作不仅加速了公司的扩张步伐,也提升了其品牌影响力和市场竞争力。

台湾致强(FORT)公司的发展小趣事

致强科技深知员工是企业持续发展的关键。因此,公司自成立以来便注重企业文化的建设,积极营造和谐、关爱的工作氛围。公司管理层倡导“尊重人性”的理念,不仅为员工提供具有竞争力的薪酬福利,还通过EAP(员工协助计划)等方式关注员工的心理健康和生活需求。EAP项目的实施不仅帮助员工缓解了工作压力,还从多方面提升了员工的归属感和幸福感,为公司的长期发展奠定了坚实的人才基础。

EG & G Inc公司的发展小趣事

随着电子技术的不断发展,EG & G Inc公司不断进行技术创新和产品升级。公司投入大量资源进行研发,成功推出了一系列具有竞争力的电子产品。其中,某款高精度测量仪器在市场上获得了广泛认可,成为了公司的明星产品。此外,公司还积极开拓新的应用领域,将电子技术应用于医疗、环保等多个领域,为公司带来了新的增长点。

问答坊 | AI 解惑

微型红外追踪及无线遥控车设计!

微型红外追踪及无线遥控车设计!…

查看全部问答>

单片机系统设计与C51编程实践

基本原则 质量是关键。没有人会对很差的工作感到满足。当完成高质量的工作时,你会为此而感到骄傲。不管你是否知道,你都会因为你的高质量工作而得到信誉。因此,要想为自己所做的事感到骄傲,就需要建立个人标准,并为达到这一标准而努力奋斗。 ...…

查看全部问答>

请教关于USB HID数据传输的问题

我现在在用LPC的ARM的USB模块于PC通讯,我想请教各位高手,如果ARM想发送数据给PC,能主动发送一个中断之类的给PC,让PC接受吗?还是只能PC先发命令呢?…

查看全部问答>

atmega16操作u盘读写模块PB375A例程

atmega16操作u盘读写模块PB375A例程 在很多工程项目中,电子系统会采集或者生成一些数据需要保存。随着U盘的普及,系统中加入数据保存到U盘已经成为一种不错的选择。该例程就是利用 atmega16的单片机操作PB375A u盘读写模块写入一些数据到U盘中 ...…

查看全部问答>

今日插件-窗口的创建和刷新

我写了个今日插件,用CWnd::Create创建的窗体,回调函数用AfxWndProc 在wm5下好用,换到wm6下有问题,有些机器上Create失败,有些机器上虽然成功了 窗体被覆盖后收不到WM_PAINT消息,谁遇到过类似问题吗;后来也改用APIC创建窗体, 但是还要在上 ...…

查看全部问答>

lm3s811 矩阵键盘

lm3s811如何使用 线反转法,读出4 *4矩阵键盘值,好象读出的数据老是不对。…

查看全部问答>

XINTF地址问题

我的XINTF地址总线20根都使用了,但是分高10根(XA19~XA10)和低10根(XA9~XA0)来使用的。现在我遇到个这样的问题,我在和CPLD连接的时候,使用高10根(XA19~XA10)地址线,DSP访问地址从0x4000开始,当CPLD判断地址的时候,收到的地址应该是0x010 ...…

查看全部问答>

DSP开发使用fopen()打开失败

我在DSP开发过程遇到问题,如下: 开发平台:TI DM6446 (ARM+DSP)双核系统 DSP程序运行后用fopen(“opt/motionDetect1227/test.map”,”rb”)函数打开读取二进制文件内容,但fopen()打开失败,不知如何解决?目前猜测是文件路径不对,这个路径是AR ...…

查看全部问答>

请问有没有一种传感器?谢谢

当它接触到水时(或者离水有一小段距离时)会产生一个开关信号送给单片机,谢谢…

查看全部问答>