问答

汇集网友智慧,解决技术难题

21ic问答首页 - 航顺单片机程序总是死

单片机程序 ck ST systick ic TI

航顺单片机程序总是死

铁头娃6662021-09-08
程序死在了自带库的微秒延时
void BSP_SYSTEM_Delay_us(uint32_t usCnt)
{
        /* SysTick default clock source: HCLK/8 = 32MHz/8 = 4MHz */
        SysTick->LOAD = 4 * usCnt;
       
        /* Clear SysTick current counter value */
        SysTick->VAL = 0;

        /* Enable SysTick counter */
        SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
       
  /* Wait for SysTick counter to 0 */        while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk))//死在这一部
        {
        }
       
        /* Disable SysTick counter */
        SysTick->CTRL = ~SysTick_CTRL_ENABLE_Msk;
       
        /* Clear SysTick current counter value */
        SysTick->VAL = 0;
}
回答 +关注 15
2978人浏览 4人回答问题 分享 举报
4 个回答
  • 本帖最后由 tianxj01 于 2021-9-10 17:15 编辑

    别迷信库,别说航顺这样的企业,新唐的库算不错了吧BUG都是一大堆,小了,给你来个莫名其妙的警告,也许不影响使用,但恶心死你,大了,直接卡BUG,凡用不利索的,哪怕自己理解有错,直接寄存器操作就好,不用固执。
    咱是解决自己应用问题的,不是给他们找BUG的。还记得当年的STM8 003,ST公司的官方IIC库和硬件IIC,你用起来只有4个字:“欲仙欲死”,直接改软IIC,速度可以达到,关键是绝对不会出错。缺点不就是多了几行代码嘛。
  • 你不会告诉我你传递的时间参数是0吧,延时函数那里加一句容错:
    if(usCnt < 2)  return   ERROR;   //一般头文件里定义有ERROR = 0。小于2最小时间是避免刚设置好值就进入中断
    铁头娃666 2021-9-10 14:18 回复TA
    应该不是,我又看了下,而且航顺的库中没有你说的这句代码,我还在找问题 
  • 找谁都没有用,你看以下是不是你的计数时钟没有打开
    铁头娃666 2021-9-9 15:44 回复TA
    usCnt这个参数为零,整个子函数运行出错了 
  • 雅特力不会,找我

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