在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32單片機(jī)學(xué)習(xí)手記

            STM32單片機(jī)學(xué)習(xí)手記

            作者: 時(shí)間:2012-10-26 來(lái)源:網(wǎng)絡(luò) 收藏

              STM學(xué)習(xí)筆記——用實(shí)現(xiàn)熒火蟲燈

              在第6篇筆記中,我用軟件延時(shí)的方法實(shí)現(xiàn)了熒火蟲,學(xué)了,當(dāng)然就要用一用了,這里仍是用熒火蟲燈為例。

              用ST庫(kù)所帶的例子Tim中的TimBase為例來(lái)修改,這個(gè)例子的位置以及如何建立工程請(qǐng)參考第7篇筆記,這里就不再重復(fù)了,下面簡(jiǎn)述一下修改的過(guò)程。

             ?。?) 由于我的板子上的燈是由PD8~PD11來(lái)控制的,因此,要將

              void RCC_Configuration(void)

              中的:

              RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //打開(kāi)GPIOC的時(shí)鐘

              改為

              RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //打開(kāi)GPIOD的時(shí)鐘

             ?。?) 將四個(gè)通道全部設(shè)置為TIM_OCMode_Toggle模式,即將

              /* Output Compare Timing Mode configuration: Channel1 *

              TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;

              改為:

              TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;

             ?。?)例子中原來(lái)中斷產(chǎn)生的頻率很低,是不適合于做這種熒火蟲燈的,但為了比較,我只改了最后一個(gè)值:

              __IO uint16_t CCR4_Val = 8192;改為

              __IO uint16_t CCR4_Val = 2048;

              這樣,這個(gè)通道的中斷頻率變?yōu)?/P>

              CC4 update rate = TIM2 counter clock / CCR4_Val = 3515.6 Hz

             ?。?) 到stm32f10x_it.c中作修改中斷處理函數(shù)如下:

              uint8_t allCount=16;

              uint8_t upDown1,upDown2,upDown3,upDown4;

              void TIM2_IRQHandler(void)

              { static uint8_t Count1,Count2,Count3,Count4;

              static uint8_t hCnt1,hCnt2,hCnt3,hCnt4;

              if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)

              {

              TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);

              if(Count1《hCnt1)

              { GPIO_SetBits(GPIOD, GPIO_Pin_8); //點(diǎn)亮燈

              }

              else

              { GPIO_ResetBits(GPIOD, GPIO_Pin_8); //熄滅燈

              }

              Count1++;

              if(Count1》=allCount)

              { Count1=0;

              if(upDown1)

              { hCnt1++;

              if(hCnt1》=(allCount-1))

              upDown1=!upDown1;

              }

              else

              { hCnt1--;

              if(hCnt1《2)

              upDown1=!upDown1;

              }

              }

             capture = TIM_GetCapture1(TIM2);

              TIM_SetCompare1(TIM2, capture + CCR1_Val);

              }

              else if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)

              {

              TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);

              if(Count2《hCnt2)

              { GPIO_SetBits(GPIOD, GPIO_Pin_9); //點(diǎn)亮燈

              }

              else

              { GPIO_ResetBits(GPIOD, GPIO_Pin_9); //熄滅燈

              }

              Count2++;

              if(Count2》=allCount)

              { Count2=0;

              if(upDown2)

              { hCnt2++;

              if(hCnt2》=(allCount-1))

              upDown2=!upDown2;

              }

              else

              { hCnt2--;

              if(hCnt2《2)

              upDown1=!upDown1;

              }

              }

              capture = TIM_GetCapture2(TIM2);

              TIM_SetCompare2(TIM2, capture + CCR2_Val);

              }

              else if (TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET)

              {

              TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);

              if(Count3《hCnt3)

              { GPIO_SetBits(GPIOD, GPIO_Pin_10); //點(diǎn)亮燈

              }

              else

              { GPIO_ResetBits(GPIOD, GPIO_Pin_10); //熄滅燈

              }

              Count3++;

              if(Count3》=allCount)

              { Count3=0;

              if(upDown3)

              { hCnt3++;

              if(hCnt3》=(allCount-1))

              upDown3=!upDown3;

              }

              else

              { hCnt3--;

              if(hCnt3《2)

              upDown3=!upDown3;

              }

              }

              capture = TIM_GetCapture3(TIM2);

              TIM_SetCompare3(TIM2, capture + CCR3_Val);

              }

              else

              {

              TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);

              if(Count4《hCnt4)

              { GPIO_SetBits(GPIOD, GPIO_Pin_11); //點(diǎn)亮燈

              }

              else

              { GPIO_ResetBits(GPIOD, GPIO_Pin_11); //熄滅燈

              }

              Count4++;

              if(Count4》=allCount)

              { Count4=0;

              if(upDown4)

              { hCnt4++;

              if(hCnt4》=(allCount-1))

              upDown4=!upDown4;

              }

              else

              { hCnt4--;

              if(hCnt4《2)

              upDown4=!upDown4;

              }

              }

              capture = TIM_GetCapture4(TIM2);

              TIM_SetCompare4(TIM2, capture + CCR4_Val);

              }

              }

              即將LED點(diǎn)亮的過(guò)程分成16(allCount)份,第一次是點(diǎn)亮1/16時(shí)間,而15/16的時(shí)間都是滅著的,這個(gè)1是變量hCnt來(lái)控制的,隨著中斷16次完畢,hCnt會(huì)加1,于是第二個(gè)周期來(lái)了,在這個(gè)周期中,LED會(huì)被點(diǎn)亮2/16,而14/16的時(shí)間是滅著的,依次類推,到最后會(huì)有 15/16的時(shí)間被點(diǎn)亮,而1/16的時(shí)間是滅著的,于是就產(chǎn)生了漸亮效果。請(qǐng)?jiān)徫以趯W(xué)習(xí)時(shí)的代碼寫得很粗糙了。

              由于TIM2_CH1通道的中斷頻率是:

              CC1 update rate = TIM2 counter clock / CCR1_Val = 146.48 Hz

              再除以16那就是:9.1Hz,閃爍現(xiàn)像應(yīng)該很明顯了。

            萬(wàn)用表相關(guān)文章:萬(wàn)用表怎么用


            pwm相關(guān)文章:pwm是什么


            51單片機(jī)相關(guān)文章:51單片機(jī)教程


            單片機(jī)相關(guān)文章:單片機(jī)教程


            單片機(jī)相關(guān)文章:單片機(jī)視頻教程


            單片機(jī)相關(guān)文章:單片機(jī)工作原理


            負(fù)離子發(fā)生器相關(guān)文章:負(fù)離子發(fā)生器原理
            塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理

            上一頁(yè) 1 2 3 下一頁(yè)

            關(guān)鍵詞: STM32 串口 PWM 定時(shí)器

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉