在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32單片機(jī)定時器調(diào)試之方波輸出

            STM32單片機(jī)定時器調(diào)試之方波輸出

            作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
            今天試著讓STM32定時器輸出50%占空比信號,按照例程寫了一下方波初始化函數(shù),例程用的是STM32自帶庫函數(shù),由于嫌麻煩,我又自己寫了一個簡單的,采用定時器1進(jìn)行輸出。結(jié)果一上來,沒反應(yīng),修改了很多參數(shù),還是沒反應(yīng),然后將開發(fā)板例程寫進(jìn)芯片后,有反應(yīng) ,仔細(xì)越多數(shù)據(jù)手冊,沒有問題,糾結(jié)一上午,中午吃飯。吃完飯后,下午又開始試驗,還是別人程序有反映,自己程序,沒反應(yīng)。再看了看,開發(fā)板程序使用的是TIM3,而我使用的是TIM1,于是又把我的程序?qū)IM1換成TIM3,點擊調(diào)試運行,有反應(yīng) 。不會是高級定時器只能干高級的任務(wù)吧,像輸出方波這么簡單的低級任務(wù)他不惜的干?郁悶了半天。后來通過在網(wǎng)上查找,這個程序

            以下為源代碼,CC1進(jìn)行比較輸出,模式為翻轉(zhuǎn)電平.

            本文引用地址:http://www.biyoush.com/article/201611/324059.htm

            程序運行后,CC中斷可以進(jìn)去,PA.11的指示燈能閃,但PA.08的指示一直為低電平,請教一下程序哪里錯了???

            void TIM1_CC_Init(void)
            {
            NVIC_InitTypeDef NVIC_InitStructure;
            GPIO_InitTypeDef GPIO_InitStructure;

            /* 使能定時器 TIM1_CC 中斷 */
            NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQChannel;
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
            NVIC_Init(&NVIC_InitStructure);

            /* 配置 PA.11 為推挽輸出 */
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_Init(GPIOA, &GPIO_InitStructure);

            GPIOA->BSRR = GPIO_Pin_11; // 將PA.08配置為高電平

            /* 配置 PA.08 為復(fù)用推挽輸出 */
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_Init(GPIOA, &GPIO_InitStructure);

            /* 預(yù)分頻自動重載寄存器 */
            TIM1->ARR = 0x2FFF;
            /* PSC 預(yù)分頻器:計數(shù)頻率 = CK_PSC /(PSC + 1) */
            TIM1->PSC = 0xFF;
            /* CCR1 捕獲比較值寄存器 */
            TIM1->CCR1 = 0xFFF;
            /* 循環(huán)計數(shù)器的寄存器(控制更新事件) */
            TIM1->RCR = 0x00; // 每次更新
            /* 捕獲/比較模式寄存器 */
            TIM1->CCMR1 = 0x30; // CC1為輸出,CCR1立即生效,輸出翻轉(zhuǎn).
            /* 捕獲/比較使能寄存器 */
            TIM1->CCER = 0x03; // 開啟CC1輸出,反向輸出
            /* 中斷使能寄存器*/
            TIM1->DIER = 0x02; // 使能 CC1 中斷
            /* 控制寄存器1 */
            TIM1->CR1 = 0x01; // 使能計數(shù)器(向上計數(shù))
            }

            /***************************************************************************************
            ** 函數(shù)名稱: TIM1_CC_IRQHandler
            ** 功能描述: CC 中斷
            ** 參 數(shù): None
            ** 返 回 值: None
            ****************************************************************************************/
            void TIM1_CC_IRQHandler(void)
            {
            static uint32 counter = 0;

            TIM1->SR &= ~2; // 清除中斷標(biāo)志(不做判斷提高效率)

            if(counter)
            {
            counter = 0;
            GPIOA->BSRR = GPIO_Pin_11;
            }
            else
            {
            counter = 1;
            GPIOA->BRR = GPIO_Pin_11;
            }
            }


            最后找到問題,沒有打開主輸出...
            /* 打斷和死區(qū)控制器*/
            TIM1->BDTR = 0x8000; // 主輸出使能(MOE)
            加這句就可以了.

            得知,高級定時器就是高級定時器,由于加入了剎車和死區(qū),所以想輸出波形,必須要比普通定時器多一句“TIM1->BDTR = 0x8000;” 開啟主輸出使能,通道輸出和這個必須同時開啟,若出現(xiàn)剎車信號,則一次將4路輸出全部關(guān)閉。以保證設(shè)備能夠正常運行。哎!悲催呀,糾結(jié)了一上午。stm32定時器還真是復(fù)雜,尤其是高級定時器。設(shè)計者真是了不起,還要感謝這位仁兄,要不是他我恐怕還得多弄幾天



            評論


            技術(shù)專區(qū)

            關(guān)閉