历史上的今天
返回首页

历史上的今天

今天是:2024年12月24日(星期二)

正在发生

2019年12月24日 | STM8S定时器TIM4定时1kHz输出

2019-12-24 来源:eefocus

1.将主时钟切换到HSE;(外部晶振为8MkHz)

2.将主时钟时钟频率8分频,即计数器时钟周期为1us;

3.设置定时器250us中断一次;

4.在中断程序里判断中断次数是否到2次;

5.到2次翻转引脚电平。(逻辑分析仪检测频率)

寄存器版:


unsigned char i=255;

PE_DDR_DDR5=1;//配置PD0为输出模式

PE_CR1_C15=1;//配置PD0为推挽模式

PE_CR2_C25=0;//配置PD0输出最大为10Mhz


  if(CLK_CMSR==0xE1) {//如果HSI为主时钟源(复位值),切换到HSE

    CLK_SWCR_SWIEN=1;//时钟切换中断使能

    CLK_SWR=0xB4;//HSE为主时钟源

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

  }


while(CLK_SWCR_SWBSY)//等待忙标志复位

{

    i--;

    if(i==0) {

      CLK_SWCR_SWBSY=0;//如果时钟切换没有成功,清除标志位SWBSY以复位当前的切换操作

      break;

    }    

}

  

  TIM4_CNTR=0; //初始化计数器值

  TIM4_ARR=0xFA; //自动重装寄存器值250,250us

  TIM4_PSCR_PSC=0x03; //预分频系数为8,8M/8=1M->1us

  TIM4_EGR_UG=1; //手动产生一个更新事件,立即更新预分频器

  TIM4_IER_UIE=1;//更新中断使能

  TIM4_CR1_CEN=1;//使能计数器

  

  while(1);

}




#pragma vector=CLK_SWITCH_vector

__interrupt void CLK_IRQHandler(void){

  CLK_SWCR_SWIF=0;//清除中断标志

    CLK_SWCR_SWEN=1;//使能时钟切换的执行  

}


unsigned char t4=0;

#pragma vector=TIM4_OVR_UIF_vector

__interrupt void TIM4_IRQHandler(void){

  

 t4++;

  if(t4==2)

  {

    PE_ODR_ODR5=!PE_ODR_ODR5;//取反

    t4=0;   

 }

 TIM4_SR_UIF=0; 

}


库函数版:


 CLK_DeInit();//重置时钟相关寄存器到默认复位值

  GPIO_Init(GPIOE, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);


  enableInterrupts();//使能全局中断


  ErrorStatus es;

  es = CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL, CLK_SOURCE_HSE, ENABLE, CLK_CURRENTCLOCKSTATE_ENABLE);

  //手动切换;新的时钟源:HSE;启动切换中断;保持原时钟源开启

  if (es == SUCCESS)  //切换是否成功,SUCCESS or ERROR

  {

     TIM4_TimeBaseInit(TIM4_PRESCALER_8, 0xFA);//初始化时基单元,8分频,自动重载寄存器值为250

     TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);//使能TIM4更新中断

    // TIM4_PrescalerConfig(TIM4_PRESCALER_8, TIM4_PSCRELOADMODE_UPDATE);

     TIM4_GenerateEvent(TIM4_EVENTSOURCE_UPDATE);//手动产生更新事件

     TIM4_Cmd(ENABLE);//启动定时器

      

  }

  else{

    CLK_SYSCLKEmergencyClear();//清除时钟切换标志

  }



  /* Infinite loop */

  while (1)


中断服务程序:


INTERRUPT_HANDLER(CLK_IRQHandler, 2)

{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

  

  ITStatus flags_tatus;

  flags_tatus = CLK_GetITStatus(CLK_IT_SWIF);//检测时钟切换中断标志

  if (flags_tatus == SET)  //如果时钟切换中断标志SWIF是置位状态,SET or RESET

  {

    CLK_ClearITPendingBit(CLK_IT_SWIF);//清除时钟切换中断标志

 

    CLK_ClockSwitchCmd(ENABLE);//启动时钟切换功能 

  };

}



 unsigned char i=0;

 INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)

 {

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

   i++;

   TIM4_ClearFlag(TIM4_FLAG_UPDATE);

   if(i==2){

     i=0;

     GPIO_WriteReverse(GPIOE, GPIO_PIN_5);

   }

  

 }


频率输出:

在这里插入图片描述

这里建议计数器计数次数不要太少,中断服务程序里程序不宜太多,否则会造成中断服务程序未执行完,又来一个中断,造成程序执行不正确。

推荐阅读

史海拾趣

DAESAN公司的发展小趣事

在电子行业中,环保问题一直备受关注。DAESAN公司深知自己的社会责任和担当,因此将环保理念融入企业的生产经营之中。他们采用环保材料和生产工艺,减少污染物排放;同时,他们还积极参与各种环保活动和公益事业,推动行业的可持续发展。DAESAN公司的环保举措赢得了社会的广泛赞誉和尊重。

请注意,以上故事均基于假设性的事实进行虚构,可能与DAESAN公司的实际情况存在出入。如需了解更多关于DAESAN公司在电子行业中的具体发展故事,请查阅相关新闻报道和官方资料。

GuangDong Province MengCo Semiconductor Co., Ltd公司的发展小趣事
对于电机抖动或异响问题,应检查电机轴承、转子等部件是否损坏或松动,必要时进行更换或紧固。
Blaze Display Technology Co Ltd公司的发展小趣事

随着公司规模的不断扩大和市场份额的逐步提升,Blaze公司开始注重品牌建设和形象提升。通过加大广告宣传力度、提升客户服务质量、参与社会公益活动等方式,公司成功塑造了专业、可靠、创新的品牌形象。同时,公司还获得了多项行业荣誉和认证,进一步提升了品牌知名度和美誉度。

Curtis Electromusic Specialties Inc公司的发展小趣事

CUI公司在发展过程中,始终注重市场拓展和品牌建设。公司通过与国内外知名企业的合作,不断拓宽产品应用领域,提升品牌影响力。同时,公司还积极参加各类行业展会和交流活动,与同行和客户建立紧密的合作关系,为公司的长期发展奠定了坚实的基础。

Fairchild公司的发展小趣事

随着科技的不断进步和市场环境的变化,Fairchild公司也面临着转型和创新的挑战。为了保持竞争力和市场地位,Fairchild公司不断加大对新技术和新产品的研发投入。同时,公司也积极寻求与其他企业和研究机构的合作,共同推动半导体技术的创新和发展。通过这些努力,Fairchild公司成功实现了从传统半导体制造商向创新型科技企业的转型。

以上五个故事简要概述了Fairchild公司在电子行业发展的历程和成就。作为半导体行业的领军企业之一,Fairchild公司凭借其卓越的技术实力、创新能力和市场洞察力,为电子行业的发展做出了重要贡献。

德力西(DELIXI)公司的发展小趣事

面对激烈的市场竞争和不断变化的市场需求,德力西始终坚持创新驱动的发展战略。公司投入大量资源进行技术研发和产品创新,推出了多款具有竞争力的新产品。同时,德力西还积极响应绿色发展的号召,致力于打造低碳环保的电子产品。例如,在芜湖基地获得了中国低压电气行业国产品牌首家五星级零碳工厂及碳中和物流园区认证,这标志着德力西在绿色发展方面取得了显著成果。

问答坊 | AI 解惑

3G无线上卡怎么进行应用开发?

我想对3G无线上网卡(如Huawei EC1260)进行应用开发,具体的想法是,把上网卡接到电脑上,通过开发的程序进行短信收发,拨打电话,连接上网,断开网络等。无线上网卡原来已经有驱动程序,但要进行自己的应用开发,不知道要怎么使用?在哪里可以获得 ...…

查看全部问答>

wireshark 可以抓取本机发给本机的数据报文吗?

听说是可以的,大家知道怎么设置吗?多谢了。…

查看全部问答>

帮忙看看!

     最近学习汇编时,对cpu的地址线,数据线和cpu位宽及内存的地址怎样分配及它于地址线的关系很模糊,哪位大侠能帮小弟讲解一下?…

查看全部问答>

求此LCD与工控板连接方案

板子是研杨的4310,带44pin的LCD接口,接口定义如下: 01. +12 VDC          02. +12 VDC 03. GND              04. GND 05. +5 VDC     &nbs ...…

查看全部问答>

怎么去判断MMA7455L是否焊好?

第一次焊LGA封装的芯片心里有点紧张,焊上去后又看不见各个引脚是否连通。要是不连通的话,那么写程序就麻烦了,所以我就打算先确定它是否连通。 昨天晚上在基地奋战到三点多,就是为了测量MMA7455L是否焊好。我的方法是用数字示波器测量mma7455l ...…

查看全部问答>

对Cortex-M3的中断嵌套时堆栈处理的疑问,望指教

看了Cortex-M3技术参考手册后,感觉对异常处理中堆栈的操作理解还是不清晰.1.在Thread mode下,发生异常或中断,处理器自动将xPSR,PC,LR,R12,R3,R2,R1,R0进行压栈,当ISR返回时,又自动将上述寄存器出栈.这个没问题.2.当抢先优先级不同时,优先 ...…

查看全部问答>

求助 波形的匹配

     各位大侠,大家好!本人菜鸟一枚,因最近要写毕业论文,所以要做一些实验。。要实现的就是,存储一组波形(几十个波形)作为波形库,然后输入一个波形,和波形库中波形比对,找出最相似的波形,最后在LCD上显示出来。请问这要 ...…

查看全部问答>

新手问个弱智的问题

/*****************************************文件名:seg.v描述:程序运行的结果:第0至第七个数码管依次显示0-7;创建人:何运涛创建时间:2012年1月17日******************************************/module seg(clk,wela,dula);input clk;//输入 ...…

查看全部问答>

学习Hercules TMS570LS硬件设计入门

一、硬件系统 原理图以TMS570LS31x Hercules USB Stick Development Kit 参考 PCB 以TMS570LS31x_USB_STICK_Gerber参考…

查看全部问答>

基于自由摆的平板控制系统中如何使用PID算法

本帖最后由 paulhyde 于 2014-9-15 04:03 编辑 这几天看2011年的B题,如果用步进电机控制平板,用平板上的陀螺仪返回角度,进行PID闭环控制,但是单摆是不断运动的,因而步进电机所需要转动的角度不断在变,PID中的DesireVaule不断在变,这时候PID ...…

查看全部问答>