欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2156|回復: 0
打印 上一主題 下一主題
收起左側(cè)

STM32單片機控制TIM3四路PWM輸出,無線串口接收數(shù)據(jù) 源代碼

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:316613 發(fā)表于 2022-7-2 21:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
項目,STM32控制TIM3四路PWM輸出,無線串口接收數(shù)據(jù)

單片機源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"


  7. void baojing_jiance()
  8. {
  9.     int i ;
  10.     if((USART_RX_STA & 0x8000) != 0) //接收完成
  11.     {
  12.         USART_RX_STA = 0;

  13.         if(USART_RX_BUF[0] == '0' && USART_RX_BUF[1] == '0' ) // 01xxxx
  14.         {
  15.             EX = 1; //啟動可燃氣體報警
  16.         }
  17.         else         if(USART_RX_BUF[0] == '1' && USART_RX_BUF[1] == '1' ) // 01xxxx
  18.             EX = 0;

  19.         if(USART_RX_BUF[2] == '0' && USART_RX_BUF[3] == '0' ) //xx23xxxx
  20.         {
  21.             H2S = 1; //啟動 硫化氫報警
  22.         }
  23.         else  if(USART_RX_BUF[2] == '1' && USART_RX_BUF[3] == '1' ) //xx23xxxx
  24.             H2S = 0;


  25.         if(USART_RX_BUF[4] == '0' && USART_RX_BUF[5] == '0' ) //xxxx45xxxx
  26.         {
  27.             O2 = 1; //啟動氧氣報警
  28.         }
  29.         else if(USART_RX_BUF[4] == '1' && USART_RX_BUF[5] == '1' ) //xxxx45xxxx
  30.             O2 = 0;

  31.         if(USART_RX_BUF[6] == '0' && USART_RX_BUF[7] == '0' ) //xxxxxx67xxxxx
  32.         {
  33.             CO = 1; //啟動 一氧化碳報警
  34.         }
  35.         else if(USART_RX_BUF[6] == '1' && USART_RX_BUF[7] == '1' ) //xxxxxx67xxxxx
  36.             CO = 0;



  37.         for(i = 0; i < 10; i++)
  38.         {
  39.             USART_RX_BUF[i] = 0;
  40.         }


  41.     }
  42. }

  43. /*
  44.     1000對應0 。
  45.         氧氣 :  680     對應20.9        19.5-23.5報警
  46.         可燃氣:  800    對應 25%左右    20-50報警
  47.         一氧化碳: 900   對應 270ppM    50-150報警
  48.         硫化氫:  900    對應11PPM       10-20報警
  49. */

  50. void  pwm_out()
  51. {

  52.     /****************可燃氣報警********************/
  53.     if(EX == 1) //
  54.     {

  55.         //        printf("EX");
  56.         TIM_SetCompare4(TIM3, 800);         // 0V            EX 可燃氣
  57.     }
  58.     else if(EX == 0) //可燃氣默認狀態(tài)
  59.     {
  60.         TIM_SetCompare4(TIM3, 1000);         // 0V            EX 可燃氣
  61.     }


  62.     /****************硫化氫報警***********************/
  63.     if(H2S == 1)
  64.     {

  65.         //        printf("H2S");
  66.         TIM_SetCompare1(TIM3, 850);          //0v      H2S 硫化氫
  67.     }
  68.     else if(H2S == 0) //硫化氫默認狀態(tài)
  69.     {
  70.         TIM_SetCompare1(TIM3, 1000);          //0v      H2S 硫化氫
  71.     }



  72.     /******************氧氣上限報警****************/
  73.     if(O2 == 1)
  74.     {

  75.         //        printf("O2");
  76.         TIM_SetCompare3(TIM3, 400);         //0.3V    O2 氧氣  19.5-23.5報警
  77.     }
  78.     else if(O2 == 0) //氧氣默認狀態(tài)
  79.     {
  80.         TIM_SetCompare3(TIM3, 680);         //0.3V    O2 氧氣  19.5-23.5報警
  81.     }





  82.     /*****************一氧化碳報警*******************/
  83.     if(CO == 1)
  84.     {

  85.         //                printf("CO");
  86.         TIM_SetCompare2(TIM3, 900);          //0v     CO 一氧化碳
  87.     }
  88.     else if(CO == 0) //一氧化碳默認狀態(tài)
  89.     {
  90.         TIM_SetCompare2(TIM3, 1000);          //0v     CO 一氧化碳
  91.     }

  92. }

  93. int main(void)
  94. {
  95.     u8 i ;
  96.     u16 led0pwmval = 0;
  97.     u8 dir = 1;
  98.     delay_init();                     //延時函數(shù)初始化
  99.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
  100.     uart_init(9600);         //串口初始化為115200
  101.     LED_Init();                             //LED端口初始化
  102.     TIM3_PWM_Init(1000 - 1, 0);         //不分頻。PWM頻率=72000000/1000=72Khz
  103.     while(1)
  104.     {
  105.         delay_ms(10);

  106. //                if(dir)        led0pwmval++;
  107. //                else         led0pwmval--;
  108. //                 if(led0pwmval>500)        dir=0;
  109. //                if(led0pwmval==0)        dir=1;

  110.         baojing_jiance();//串口數(shù)據(jù)判斷
  111.         pwm_out();        //控制PWM輸出
  112.     }
  113. }
復制代碼

Keil代碼下載:
Keil代碼.7z (187.98 KB, 下載次數(shù): 42)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表