3764|2

156

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【新驱动力科技MM32F031C6开发板评测】ADC&定时器中断&独立看门狗 [复制链接]

    在ARM的单片机中,都会带有ADC接口、定时器和独立看门狗三大常用外设,这三种外设在实际的产品项目中非常常用,ADC接口主要连接各种电压反馈信号的传感器,独立看门狗主要用于防止设备跑飞和假死,因为独立看门狗是用ARM内部独立的看门狗时钟的,独立看门狗的时钟一旦被寄存器开启了,除了复位以外没有别的办法可以让它停下来,所以CPU是否跑飞、死机、死循环都不会影响到独立看门狗工作。而定时器中断则主要是执行一些对时间间隔要求非常严格的工作,比如给看门狗喂狗,喂狗间隔一旦超出看门狗计数器溢出的时间系统就会马上复位,所以需要定时器中断来保证每次喂狗的时间间隔都在严格控制的范围内,如果CPU跑飞,定时器中断无法及时响应,则看门狗计数器溢出,系统复位。
    这个帖子我用MM32FC103的ADC接口连接常用的光照传感器,电压值与光照强度呈正相关线性关系,光照强度越强,传感器返回的电压值越高。由于之前我用MM32板子连接了一个液晶屏,所以可以将光照强度以百分比形式显示出来。
    然后是关于定时器中断和独立看门狗的,这里我使用的定时器为官方例程里面用的TIM2, 不过做了一些改动。官方的配置如下:


TIM2_Init(48000000/100000-1,99);


void TIM2_Init(int Prescaler,int Period)
{
    TIM_TimeBaseInitTypeDef TIM_StructInit;
    NVIC_InitTypeDef NVIC_StructInit;
   
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
   
    TIM_StructInit.TIM_Period=Period;
    TIM_StructInit.TIM_Prescaler=Prescaler;
    TIM_StructInit.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_StructInit.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_StructInit.TIM_RepetitionCounter=0;
   
    TIM_TimeBaseInit(TIM2, &TIM_StructInit);
   
    NVIC_StructInit.NVIC_IRQChannel=TIM2_IRQn;
    NVIC_StructInit.NVIC_IRQChannelPriority=1;
    NVIC_StructInit.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_StructInit);
   
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
    TIM_Cmd(TIM2, ENABLE);       
}


void TIM2_IRQHandler(void)
{
    /*必须手动清除中断标志位*/
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
   
    /*全局标志*/
    ucTim2Flag++;
   
}


设置的分频值较大,计数值很小,只有99,也就是说,官方的定时器中断是非常频繁触发的,基本上一秒触发几百次中断,这样对CPU的负担很大,于是我就改成
TIM2_Init(48000000/1000-1,499);
这样的话,就是500毫秒即0.5秒进一次中断服务函数,再在中断里面喂狗:
void TIM2_IRQHandler()
{
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
        IWDG->KR = 0xAAAA;
        SPI_LCD_Show_String(192,32,"已喂狗",0,0x07ff,ZF32_NORMAL);
   
}


看门狗的配置为
IWDG_Init(IWDG_Prescaler_32,0xff);
32分频,255计数值,也就是大概1秒溢出一次,而我设置0.5秒喂一次狗,就不会导致溢出。


看看效果:

上传代码:
MM32F031C6T6.zip (140.99 KB, 下载次数: 6)
在之前的工程中没有上传开发环境截图和下载代码成功的截图,现在补上:


那么现在完成的任务就有4.5个了,还差一个PWM的任务,会在下一帖中完成



此内容由EEWORLD论坛网友donatello1996原创,如需转载或用于商业用途需征得作者同意并注明出处
,手册勘误任务和建议任务我已经在新驱动力和MM32的官方群中跟他们的技术人员讨论过了,也在下一帖中贴出来:



最新回复

不错,我才整理了两个,惭愧  详情 回复 发表于 2018-11-12 08:45
点赞 关注(1)
 
 

回复
举报

7452

帖子

18

TA的资源

五彩晶圆(高级)

沙发
 
 
 

回复

1368

帖子

6

TA的资源

版主

板凳
 
不错,我才整理了两个,惭愧
个人签名专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表