历史上的今天
返回首页

历史上的今天

今天是:2025年04月22日(星期二)

正在发生

2018年04月22日 | STM32Cubemx下实现通用定时器微秒级延时

2018-04-22 来源:eefocus

因为STM32 HAL库中仅有对HAl_Delay()毫秒级的延时,为实现精确的微秒级延时,就不得不修改Systick,但由于HAL库内部使用其作为超时判断等操作,对其修改会发生不可预期的错误,不建议修改。因此,使用通用定时器进行定时操作。 
参考网上例程,使用定时器中断方式实现延时,代码如下:

/*

    TIM3溢出时间=72MHz/(71+1)/(0+1)=1Mhz=1us

    计数模式:向上计数模式

    使能TIM3中断

*/

__IO static uint32_t usDelay=0;


void Delayms(uint32_t ms)

{

    Delayus(ms*1000);

}


void Delayus(uint32_t us)

{

    usDelay=us;


    HAL_TIM_Base_Start_IT(&htim3);


    while(usDelay);


    HAL_TIM_Base_Stop_IT(&htim3);

}


//重写回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

    if(htim->Instance == TIM3)

    {

        if(usDelay!=0)

        {

            usDelay--;

        }

    }

}

虽然说以上程序的并没什么错误,但在实际运行中,却无法得到正确的运行。同时,在进行Debug调试时,单步执行又可以正常运行。 
主要原因在于:中断间隔时间太短,导致中断函数还没有运行完成,其中断标志位却再次置位,导致在程序卡死。

因此,关闭定时器中断,采用定时器轮询的方式实现延时,代码如下:


/*

    TIM3溢出时间=72MHz/(71+1)/(0+1)=1Mhz=1us

    计数模式:向下计数模式

*/

void Delay_us(uint32_t us){

    uint16_t counter=us&0xffff;


    HAL_TIM_Base_Start(&htim3);

    __HAL_TIM_SetCounter(&htim3,counter);


    while(counter>1)

    {

        counter=__HAL_TIM_GetCounter(&htim3);

    }


    HAL_TIM_Base_Stop(&htim3);

}


void Delay_ms(uint32_t ms){

    Delay_us(1000*ms);

}



推荐阅读

史海拾趣

EUPEC [eupec GmbH]公司的发展小趣事

面对未来市场的机遇和挑战,EUPEC制定了明确的发展战略。公司将继续加大技术创新和研发投入力度,推动电力半导体技术的进步和应用拓展。同时,EUPEC还将加强与国际知名企业的合作与交流,不断提升自身的竞争力和影响力。在应对市场变化和挑战的过程中,EUPEC将始终坚持以客户为中心的理念,为客户提供更优质的产品和服务。

请注意,以上故事是基于EUPEC公司的发展历程和相关信息进行概括和编写的,并非完全基于事实的直接叙述。如需更详细和准确的信息,请参考相关官方资料或新闻报道。

CyOptics Inc公司的发展小趣事

除了数据通讯和电信市场外,CyOptics的光学产品还逐渐拓展至其他领域。例如,公司的光学组件已集成至光学收发器、转发器及线卡等设备中,为数据中心、高性能计算和企业存储网络等应用提供了强有力的支持。此外,CyOptics还积极开拓新兴市场,如数据库、地铁及长途干线市场等,为客户提供定制化的光学解决方案。

ACP Optoelectronic Technology Co Ltd公司的发展小趣事

在国内市场取得一定成绩后,ACP Optoelectronic Technology Co Ltd开始积极拓展国际市场。公司积极参加国际电子展会和技术交流活动,与海外企业建立合作关系,拓展销售渠道。经过几年的努力,ACP Optoelectronic Technology Co Ltd的产品已经成功打入多个国际市场,公司也逐渐发展成为一家具有国际影响力的光电企业。

B+B SmartWorx公司的发展小趣事

B+B SmartWorx一直致力于产品创新,不断推出符合市场需求的新产品。其中,光纤转换器、3G/4G无线路由器以及Wzzard系列无线感测装置等产品受到了市场的广泛认可。这些产品不仅填补了研华在某些领域的空白,也展示了B+B SmartWorx在物联网和工业网通领域的强大实力。此外,公司还积极开发风扇配件、AC插座等电力元件产品线,进一步丰富了其产品体系。

Greatbatch-Sierra Inc公司的发展小趣事

B+B SmartWorx的前身是B&B Electronics,一个在1981年成立的公司,起初主要为无线和有线网络提供设备连接解决方案。随着技术的快速发展,物联网和M2M连接的需求日益增长,B&B Electronics意识到必须进行创新以应对市场的变化。于是,公司开始致力于开发“边缘智能”技术,使网络连接设备更加智能、自主和响应迅速。这一创新转型使得公司在物联网行业中崭露头角,并在2015年决定将公司名称更改为B+B SmartWorx,以更好地反映其业务重心和技术方向。

CCS[Custom Computer Services]公司的发展小趣事

随着数字化时代的到来,CCS公司积极拥抱数字化转型。公司投入大量资源进行信息化建设,引入了先进的信息管理系统和生产设备,实现了生产过程的自动化和智能化。数字化转型不仅提高了公司的生产效率和管理水平,还为客户提供了更加便捷和高效的服务体验。展望未来,CCS公司将继续加大在数字化转型方面的投入力度,不断探索新的业务模式和技术创新,为公司的可持续发展注入新的动力。

这些故事虽然基于虚构,但它们的逻辑和结构都是基于电子行业发展的一般规律和常识。希望这些故事能够满足您的需求,并为您了解电子行业中的公司发展提供一定的参考。

问答坊 | AI 解惑

基于FPGA的PCI总线接口设计

摘 要 :PCI是一种高性能的局部总线规范,可实现各种功能标准的PCI总线卡。本文简要介绍了PCI总线的特点、信号与命令,提出了一种利用高速FPGA实现PCI总线接口的设计方案。 关键词 :PCI总线;信号;命令;协议 在现代数据采集及处理系统中,ISA ...…

查看全部问答>

插补算法

插补算法!!!!!!!!!!!!!!!!…

查看全部问答>

数字信号处理的FPGA实现(好书共享)

数字信号处理的FPGA实现(好书共享)…

查看全部问答>

关于步进电机的疑问

我想在坐标(X1,Y1),(X2,Y2)之间走一条直线,但我不知道怎么编写程序的,还有它与电机的步数有什么样的关系呢?知道的告诉我,谢谢。…

查看全部问答>

DZK后缀的文件用什么软件开

DZK,HZK后缀的文件用什么软件开。…

查看全部问答>

理解下一代数据采集技术

  来源:NI : 理解下一代数据采集技术——USB和Wi-Fi数据采集的优势美国国家仪器有限公司 Graham Green过去20年中,数据采集从一种应用有限的技术已经发展为可适用于各种高性能测量应用的平台。通过软件为核心的图形化编程和基于PC的模 ...…

查看全部问答>

arm9 自己编译的2.6.12内核 屏幕整体左移

我买了一块 LJD-2440 带一块CT35T触摸屏 自己用厂家提供的Linux2.6.12包编译内核成功 跟光盘上带的官方编译的内核大小差了几百字节 将zImage 烧到NAND FLASH后启动系统 发现一切似乎正常  屏幕整体向左上偏移 分别用3.4.1和3.3. ...…

查看全部问答>

关于没有通电的FPGA自动工作的奇怪现象

这几天在工作中遇到一个很奇怪的现象。我有一块FPGA的板子(I/O使用+3.3V,内核使用+1.2V),但是使用时我没有对它进行供电,而是将这块板子的信号地和另一块板子连接起来,从另一块板子上引出一个+3.3V接到FPGA的随意一个I/O管脚,此时FPGA及其外 ...…

查看全部问答>

求一张PCB图,原理图已给出,急!急!急!

毕业论文要求一张PCB图,原理图已有,全自动应急灯的、、、急!急!急! 求帮忙...........联系QQ:339739667、:carnation:…

查看全部问答>

launchpad 按键控制LED

void main( void ){   // Stop watchdog timer to prevent time out reset  WDTCTL = WDTPW + WDTHOLD;    P1DIR |= BIT0 | BIT6;  //俩灯配置为输出    P1DIR &= ~BIT3;     ...…

查看全部问答>