问答

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

21ic问答首页 - GD32F303问题

GD32F303 TI 函数 IO ic ICE

GD32F303问题

学徒小卢2023-12-02
问题背景是这样的:
配置了一个20Khz的定时器溢出中断,System_cnt_add()函数是对一个变量++,就是创建了一个时间基准。然后在Task_time_slice_function()函数里面实现了一个led每0.5s翻转的任务。
于是遇到了这样一个问题:
当我把这个Task_time_slice_function()函数放在中断的时候,led能够正常实现每0.5s翻转的操作,也就是输出一个1Hz的方波。但是当我把Task_time_slice_function()函数放在main函数的while循环里面时,功能就失效了,变成输出32Hz的方波。有没有人知道怎么回事,希望能指点一下,谢谢!
回答 +关注 7
834人浏览 1人回答问题 分享 举报
1 个回答
  • 这是用到的几个函数
    int main(void)
    {
            Systemclock_config();
            nvic_config();
            gpio_config();
            spi2_config();
            timer_config();
           
            System_cnt_init();
           
            while(1)
            {
                            Task_time_slice_function();
            }
    }


    /* time0 20kHz*/
    void TIMER0_UP_IRQHandler(void)
    {                                                       
                    if(SET == timer_interrupt_flag_get(TIMER0, TIMER_INT_UP))
                    {
                            timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP);
                           
                            System_cnt_add();
                   
                    }
    }


    void Task_time_slice_function(void)
    {
            /* 1ms */
            if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_1ms) >= systemclock_data.systemclock_cnt_1ms)
            {
                    systemclock_data.systemclock_lastcnt_1ms = systemclock_data.systemclock_cnt;
                    led_main();
            }
            /* 10ms */
            if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_10ms) >= systemclock_data.systemclock_cnt_10ms)
            {
                    systemclock_data.systemclock_lastcnt_10ms = systemclock_data.systemclock_cnt;
                   
            }
            /* 100ms */
            if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_100ms) >= systemclock_data.systemclock_cnt_100ms)
            {
                    systemclock_data.systemclock_lastcnt_100ms = systemclock_data.systemclock_cnt;
            }
            /* 1000ms */
            if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_1000ms) >= systemclock_data.systemclock_cnt_1000ms)
            {
                    systemclock_data.systemclock_lastcnt_1000ms = systemclock_data.systemclock_cnt;
                   
            }
    }


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