ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

stm32f103zet红牛开发板STMcubeMX hal库版:03旺宝-红牛-蜂鸣器 SysTick应ongoi

2022-09-05 03:04:21  阅读:181  来源: 互联网

标签:03 HAL us Delay SysTick 蜂鸣器 currentTicks uint32 红牛


程序运行后,蜂鸣器发出类似报警声

.蜂鸣器在   pb2上接着。这是一个无源蜂鸣器。不是给电就响。得给一定频率的信号才行。这里用定时器跟gpio生成一定频率的方波。

 

 

HAL_Delay(uint32_t Delay)   函数默认就是使用毫秒ms做单位。这里要实现一个用us微秒的延时函数。这是从arduino里抄来的。
static inline void delayMicroseconds(uint32_t us)
{

  __IO uint32_t currentTicks = SysTick->VAL;
  /* Number of ticks per millisecond */
  const uint32_t tickPerMs = SysTick->LOAD + 1;
  /* Number of ticks to count */
  const uint32_t nbTicks = ((us - ((us > 0) ? 1 : 0)) * tickPerMs) / 1000;
  /* Number of elapsed ticks */
  uint32_t elapsedTicks = 0;
  __IO uint32_t oldTicks = currentTicks;
  do {
    currentTicks = SysTick->VAL;
    elapsedTicks += (oldTicks < currentTicks) ? tickPerMs + oldTicks - currentTicks :
                    oldTicks - currentTicks;
    oldTicks = currentTicks;
  } while (nbTicks > elapsedTicks);
}

 从标准库里抄来的  因为是寄存器操作,反而可以直接照搬

void Delay_us(uint32_t nus)
{        
    uint32_t temp;             
    SysTick->LOAD=nus*9;                             //时间加载 fac_us=9,走9次就是1us              
    SysTick->VAL=0x00;                                    //清空计数器 
    SysTick->CTRL=0x01 ;                                  //开始倒数  
    do
    {
        temp=SysTick->CTRL;
    }
    while(temp&0x01&&!(temp&(1<<16)));                     //等待时间到达  
    SysTick->CTRL=0x00;                                    //关闭计数器
    SysTick->VAL =0x00;                                    //清空计数器    
}

hai库的写法 

// HAL_RCC_GetHCLKFreq()/1000 1ms 中断一次,即 HAL_Delay 函数延时基准为 1ms
23 // HAL_RCC_GetHCLKFreq()/100000 10us 中断一次,即 HAL_Delay 函数延时基准为 10us
24 // HAL_RCC_GetHCLKFreq()/1000000 1us 中断一次,即 HAL_Delay 函数延时基准为 1us
25 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000); // 配置并启动系统滴答定时器
26 /* 系统滴答定时器时钟源 */
27 HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
28 /* 系统滴答定时器中断优先级配置 */
29 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

 

 三种写法都可以。但是1微秒的定时啥也干不了。中断的时间都不止1.用10微秒延时还正常

标签:03,HAL,us,Delay,SysTick,蜂鸣器,currentTicks,uint32,红牛
来源: https://www.cnblogs.com/kyo413/p/16656688.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有