久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3095|回復: 1
收起左側

STM32F407 PWM輸出時,一次中斷未執行完,下一次中斷就進入,導致波形輸出錯亂

[復制鏈接]
ID:600220 發表于 2019-8-14 21:10 | 顯示全部樓層 |閱讀模式
1黑幣
設計使用的是STM32F407PWM輸出功能,已有內含117個元素的數組前4個元素分別為1,2,1,3,后113個元素為0和1。
預期效果:根據117個數組元素,生成頻率為1MHz、50%占空比、輸出極性可調的117個連續方波(其中,根據前四個元素生成的方波頻率不是1us)。依次讀取數組元素,若數組中元素為1,則先是500ns低電平后是500ns高電平輸出;若數組中元素為0,則先是500ns高電平后是500ns低電平輸出,從而連續輸出117個方波。
現在我遇到的問題是中斷處理函數運行過慢,一次中斷未執行完,下一次中斷就進入,導致PWM波形輸出紊亂。我用示波器測試,如果方波頻率為1KHz,波形不錯亂,大于10KHz,錯亂現象逐漸嚴重。
現在我的中斷處理函數運行時間大概在1us左右,因此對于1MHz的PWM輸出是有問題的。所以向各位STM32的前輩請教一下,這種情況該怎樣解決呀。請大家幫忙看一下。萬分感謝

這是我現在的中斷處理函數:

//TIM12中斷服務函數

int j=0;

void TIM8_BRK_TIM12_IRQHandler(void)
{

    int t;
    extern int8_t ADSB[117];
   
    if(TIM_GetITStatus(TIM12,TIM_IT_Update)==SET) //溢出中斷
            {            
                if(j==117)
                {
                    TIM_Cmd(TIM12, DISABLE);
                    TIM_ForcedOC1Config(TIM12, TIM_ForcedAction_Active);
                    j=0;
                    DS4=!DS4;
                    delay_ms(200);
                    TIM12_PWM_Init(84-1,1-1);// PWM~1MHz
                    TIM_SetCompare1(TIM12,42);     
                }
                else
                {   
                        t=ADSB[j];
                        if(t==0)
                            {
                                TIM12->CCER|=(uint16_t)0x0002;  //TIM_OCPolarity_Low
                                TIM12->ARR =84;
                            }
                        else if(t==1)
                            {
                                TIM12->CCER &=~(uint16_t)0x0002;  //TIM_OCPolarity_High
                                TIM12->ARR =84;
                            }
                      else if(t==2)
                            {
                                TIM12->CCER &=~(uint16_t)0x0002;  //TIM_OCPolarity_High
                                TIM12->ARR =210;
                          }
                        else if(t==3)
                            {
                                TIM12->CCER &=~(uint16_t)0x0002;  //TIM_OCPolarity_High
                                TIM12->ARR =294;
                          }   
                }
                j++;
            }
TIM_ClearITPendingBit(TIM12,TIM_IT_Update);  //清除中斷標志位

}

回復

使用道具 舉報

ID:183159 發表于 2019-8-15 13:30 | 顯示全部樓層
我給你個參考:我以前做過一個紅外遙控器,也是用到了stm32的定時器pwm輸出功能,我是這樣實現的。用一個定時器輸出pwm,設定好了頻率和占空比,然后用另一個定時器進行中斷, 在中斷中開關pwm,并且動態的改變這個定時器的初始值,這樣就可以輸出不同時長的pwm波。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩二区三区 | 久热久热| 中文字幕一区二区三区四区 | 国产1区2区3区 | 亚洲高清视频一区二区 | 欧美精品1区2区 | 中文字幕一区在线观看视频 | 久久久婷婷 | 在线观看电影av | 国产精品久久久久久久久免费 | av黄色免费 | 欧洲一区在线观看 | 中文字幕福利 | 欧美精品一区二区三区四区 | 91亚洲一区| 精品96久久久久久中文字幕无 | 中文字幕日韩一区 | 人人爱干 | 日韩伦理一区二区 | 欧美狠狠操 | 国产精品一区二区在线免费观看 | 亚洲第一女人av | 国产精品久久精品 | 欧美 日韩 国产 一区 | 久久久久9999亚洲精品 | 久久精品国产免费一区二区三区 | 日本福利视频 | 欧美二区在线 | 欧美国产一区二区 | 日韩亚洲欧美一区 | 成人福利视频 | 色免费视频| 国产日产欧产精品精品推荐蛮挑 | 日本三级在线网站 | 国产综合精品 | 黄网站在线播放 | 国产亚洲一区二区在线观看 | 国产探花在线精品一区二区 | 欧美黄视频 | 久久久久久91| 国产第二页 |