找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

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

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

單片機(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; //啟動(dòng)可燃?xì)怏w報(bào)警
  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; //啟動(dòng) 硫化氫報(bào)警
  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; //啟動(dòng)氧氣報(bào)警
  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; //啟動(dòng) 一氧化碳報(bào)警
  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對(duì)應(yīng)0 。
  45.         氧氣 :  680     對(duì)應(yīng)20.9        19.5-23.5報(bào)警
  46.         可燃?xì)猓?nbsp; 800    對(duì)應(yīng) 25%左右    20-50報(bào)警
  47.         一氧化碳: 900   對(duì)應(yīng) 270ppM    50-150報(bào)警
  48.         硫化氫:  900    對(duì)應(yīng)11PPM       10-20報(bào)警
  49. */

  50. void  pwm_out()
  51. {

  52.     /****************可燃?xì)鈭?bào)警********************/
  53.     if(EX == 1) //
  54.     {

  55.         //        printf("EX");
  56.         TIM_SetCompare4(TIM3, 800);         // 0V            EX 可燃?xì)?br />
  57.     }
  58.     else if(EX == 0) //可燃?xì)饽J(rèn)狀態(tài)
  59.     {
  60.         TIM_SetCompare4(TIM3, 1000);         // 0V            EX 可燃?xì)?br />
  61.     }


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

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



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

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





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

  85.         //                printf("CO");
  86.         TIM_SetCompare2(TIM3, 900);          //0v     CO 一氧化碳
  87.     }
  88.     else if(CO == 0) //一氧化碳默認(rèn)狀態(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í)函數(shù)初始化
  99.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  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. }
復(fù)制代碼

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

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表