找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1733|回复: 0
打印 上一主题 下一主题
收起左侧

STM32单片机控制TIM3四路PWM输出,无线串口接收数据 源代码

[复制链接]
跳转到指定楼层
楼主
ID:316613 发表于 2022-7-2 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
项目,STM32控制TIM3四路PWM输出,无线串口接收数据

单片机源程序如下:
  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) //可燃气默认状态
  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) //硫化氢默认状态
  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) //氧气默认状态
  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) //一氧化碳默认状态
  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();                     //延时函数初始化
  99.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  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();//串口数据判断
  111.         pwm_out();        //控制PWM输出
  112.     }
  113. }
复制代码

Keil代码下载:
Keil代码.7z (187.98 KB, 下载次数: 42)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表