你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于stm32FreeRtos 温湿度采集+蓝牙

[复制链接]
STMCU小助手 发布时间:2022-10-26 23:07
基于FreeRtos温湿度采集+蓝牙
本次分享的是基于FreeRtos的温湿度采集并且将所采集的数据通过蓝牙每隔1s发送到手机一次。

硬件说明

使用的是DHT11温湿度模块,蓝牙使用的是HC-05,具体的使用方法就不做介绍了。

893c021d6c6a4d659c8dd2048a48ec20.png
e10c466f757f4112911f24ab22bc9100.png

下面直接进入主题

usart.h //这个头文件里面宏定义了三个串口 可根据自己需求进行使用

  1. #ifndef __USART_H
  2. #define __USART_H
  3. #include "stdio.h"        
  4. #include "sys.h"

  5. #define USART_REC_LEN                          200          //定义最大接收字节数 200
  6. #define EN_USART1_RX                         1                //使能(1)/禁止(0)串口1接收
  7. #define EN_USART2_RX                         1                //使能(1)/禁止(0)串口1接收
  8. #define EN_USART3_RX                         0          //使能(1)/禁止(0)串口1接收


  9. #define  DEBUG_USARTx                   USART1
  10. //串口1
  11. #define USART1_GPIO_PORT      GPIOA
  12. #define USART1_GPIO_CLK       RCC_APB2Periph_GPIOA
  13. #define USART1_TX_GPIO_PIN    GPIO_Pin_9
  14. #define USART1_RX_GPIO_PIN    GPIO_Pin_10
  15. //串口2
  16. #define USART2_GPIO_PORT      GPIOA
  17. #define USART2_GPIO_CLK       RCC_APB2Periph_GPIOA
  18. #define USART2_TX_GPIO_PIN    GPIO_Pin_2
  19. #define USART2_RX_GPIO_PIN    GPIO_Pin_3


  20. //串口3
  21. #define USART3_GPIO_PORT      GPIOB
  22. #define USART3_GPIO_CLK       RCC_APB2Periph_GPIOB
  23. #define USART3_TX_GPIO_PIN    GPIO_Pin_10
  24. #define USART3_RX_GPIO_PIN    GPIO_Pin_11
  25. #define USART3_RX_EN                         1                                        //0,不接收;1,接收.
  26. #define USART3_MAX_RECV_LEN                600                                        //最大接收缓存字节数
  27. extern vu16 USART3_RX_STA;                                                   //接收数据状态
  28. extern u8  USART3_RX_BUF[USART3_MAX_RECV_LEN];                 //接收缓冲,最大USART3_MAX_RECV_LEN字节

  29.                   
  30. extern u8  USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
  31. extern u16 USART_RX_STA;                         //接收状态标记        
  32. //如果想串口中断接收,请不要注释以下宏定义
  33. void uart_init(u32 bound);
  34. void usart_init2(u32 bound);
  35. void usart_init3(u32 bound);
  36. void u3_printf(char* fmt,...) ;
  37. void USART_Send_Byte(USART_TypeDef* USARTx, uint16_t Data);
  38. void USART_Send_String(USART_TypeDef* USARTx, char *str);
  39. #endif
复制代码

usart.c

  1. #include "sys.h"
  2. #include "usart.h"         
  3. #include "stdarg.h"        
  4. #include "string.h"
  5. //         
  6. //如果使用ucos,则包括下面的头文件即可.
  7. #if SYSTEM_SUPPORT_OS
  8. #include "FreeRTOS.h"                                        //FreeRTOS使用                  
  9. #endif


  10. #if 1
  11. #pragma import(__use_no_semihosting)            
  12. //标准库需要的支持函数                 
  13. struct __FILE
  14. {
  15.         int handle;

  16. };

  17. FILE __stdout;      
  18. //定义_sys_exit()以避免使用半主机模式   
  19. void _sys_exit(int x)
  20. {
  21.         x = x;
  22. }
  23. //重定义fputc函数
  24. int fputc(int ch, FILE *f)
  25. {      
  26.         while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
  27.     USART1->DR = (u8) ch;      
  28.         return ch;
  29. }
  30. #endif

  31. /*使用microLib的方法*/
  32. /*
  33. int fputc(int ch, FILE *f)
  34. {
  35.         USART_SendData(USART1, (uint8_t) ch);

  36.         while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}        

  37.     return ch;
  38. }
  39. int GetKey (void)  {

  40.     while (!(USART1->SR & USART_FLAG_RXNE));

  41.     return ((int)(USART1->DR & 0x1FF));
  42. }
  43. */



  44. /*===============================================================================================*/
  45. u8 USART_RX_BUF[USART_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节.
  46. //接收状态
  47. //bit15,        接收完成标志
  48. //bit14,        接收到0x0d
  49. //bit13~0,        接收到的有效字节数目
  50. u16 USART_RX_STA=0;       //接收状态标记        
  51. /*================================================================================================*/


  52. #if EN_USART1_RX   //如果使能了接收
  53. //串口1中断服务程序
  54. //注意,读取USARTx->SR能避免莫名其妙的错误           


  55. void uart_init(u32 bound){
  56.         //GPIO端口设置
  57.         GPIO_InitTypeDef GPIO_InitStructure;
  58.         USART_InitTypeDef USART_InitStructure;
  59.         NVIC_InitTypeDef NVIC_InitStructure;
  60.          
  61.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //使能USART1,GPIOA时钟

  62.         //USART1_TX   GPIOA.9
  63.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  64.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  65.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
  66.         GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

  67.         //USART1_RX          GPIOA.10初始化
  68.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  69.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  70.         GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  

  71.         //Usart1 NVIC 配置
  72.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  73.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=4 ;//抢占优先级3
  74.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                //子优先级3
  75.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
  76.         NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器

  77.         //USART 初始化设置

  78.         USART_InitStructure.USART_BaudRate = bound;//串口波特率
  79.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
  80.         USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
  81.         USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
  82.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
  83.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式

  84.         USART_Init(USART1, &USART_InitStructure); //初始化串口1
  85.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
  86.         USART_Cmd(USART1, ENABLE);                    //使能串口1
  87. }

  88. void USART1_IRQHandler(void)                        //串口1中断服务程序
  89. {
  90.         u8 Res;

  91.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  92.                 {
  93.                 Res =USART_ReceiveData(USART1);        //读取接收到的数据
  94.                
  95.                 if((USART_RX_STA&0x8000)==0)//接收未完成
  96.                         {
  97.                         if(USART_RX_STA&0x4000)//接收到了0x0d
  98.                                 {
  99.                                 if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
  100.                                 else USART_RX_STA|=0x8000;        //接收完成了
  101.                                 }
  102.                         else //还没收到0X0D
  103.                                 {        
  104.                                 if(Res==0x0d)USART_RX_STA|=0x4000;
  105.                                 else
  106.                                         {
  107.                                         USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
  108.                                         USART_RX_STA++;
  109.                                         if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收         
  110.                                         }                 
  111.                                 }
  112.                         }                    
  113.      }
  114. }
  115. #endif        

  116. /*=======================================================串口二===========================================*/

  117. #if  EN_USART2_RX

  118. void usart_init2(u32 bound)
  119. {
  120.     GPIO_InitTypeDef GPIO_Init_Structure;                            //定义GPIO结构体
  121.     USART_InitTypeDef USART_Init_Structure;                          //定义串口结构体
  122.                 NVIC_InitTypeDef  NVIC_Init_Structure;                                                                                                                //定义中断结构体
  123.                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  124.         
  125.     RCC_APB2PeriphClockCmd(USART2_GPIO_CLK,  ENABLE);                 //开启GPIOA时钟
  126.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,  ENABLE);            //开启APB2总线复用时钟
  127.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,  ENABLE);          //开启USART1时钟

  128.     //配置PA2 TX
  129.     GPIO_Init_Structure.GPIO_Mode  = GPIO_Mode_AF_PP;                //复用推挽
  130.     GPIO_Init_Structure.GPIO_Pin   = USART2_TX_GPIO_PIN;
  131.     GPIO_Init_Structure.GPIO_Speed = GPIO_Speed_10MHz;

  132.     GPIO_Init( USART2_GPIO_PORT, &GPIO_Init_Structure);

  133.     //配置PA3 RX
  134.     GPIO_Init_Structure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;                //复用推挽
  135.     GPIO_Init_Structure.GPIO_Pin   = USART2_RX_GPIO_PIN;
  136.     GPIO_Init( USART2_GPIO_PORT, &GPIO_Init_Structure);
  137.         
  138.     USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);        
  139.     USART_Init_Structure.USART_BaudRate = bound;                                          //波特率设置为115200
  140.     USART_Init_Structure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;       //硬件流控制为无
  141.     USART_Init_Structure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;                       //模式设为收和发
  142.     USART_Init_Structure.USART_Parity = USART_Parity_No;                                   //无校验位
  143.     USART_Init_Structure.USART_StopBits = USART_StopBits_1;                                //一位停止位
  144.     USART_Init_Structure.USART_WordLength = USART_WordLength_8b;                           //字长为8位  
  145.     USART_Init(USART2, &USART_Init_Structure);  
  146.     USART_Cmd(USART2, ENABLE);
  147.                
  148.                 //中断结构体配置
  149.                 NVIC_Init_Structure.NVIC_IRQChannel                         =   USART2_IRQn;
  150.                 NVIC_Init_Structure.NVIC_IRQChannelCmd           =   ENABLE;
  151.                 NVIC_Init_Structure.NVIC_IRQChannelPreemptionPriority  =  5;
  152.                 NVIC_Init_Structure.NVIC_IRQChannelSubPriority         =  0;
  153.                 NVIC_Init(&NVIC_Init_Structure);
  154.                
  155.                
  156. }


  157. void USART2_IRQHandler(void)                        //串口1中断服务程序
  158. {
  159.         u8 Res;

  160.         if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  161.                 {
  162.                 Res =USART_ReceiveData(USART2);        //读取接收到的数据
  163.                
  164.                 if((USART_RX_STA&0x8000)==0)//接收未完成
  165.                         {
  166.                         if(USART_RX_STA&0x4000)//接收到了0x0d
  167.                                 {
  168.                                 if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
  169.                                 else USART_RX_STA|=0x8000;        //接收完成了
  170.                                 }
  171.                         else //还没收到0X0D
  172.                                 {        
  173.                                 if(Res==0x0d)USART_RX_STA|=0x4000;
  174.                                 else
  175.                                         {
  176.                                         USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
  177.                                         USART_RX_STA++;
  178.                                         if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收         
  179.                                         }                 
  180.                                 }
  181.                         }                    
  182.      }
  183. }

  184. #endif



  185. /*==================================================串口三============================================== */

  186. #if  EN_USART3_RX

  187.          
  188. u8  USART3_RX_BUF[USART3_MAX_RECV_LEN];
  189. //接收到的数据状态
  190. //[15]:0,没有接收到数据;1,接收到了一批数据.
  191. //[14:0]:接收到的数据长度
  192. vu16 USART3_RX_STA=0;


  193. void usart_init3(u32 bound)
  194. {
  195.     GPIO_InitTypeDef GPIO_Init_Structure;                            //定义GPIO结构体
  196.     USART_InitTypeDef USART_Init_Structure;                          //定义串口结构体
  197.           NVIC_InitTypeDef  NVIC_Init_Structure;                                                                                                                //定义中断结构
  198.         
  199.     RCC_APB2PeriphClockCmd(USART3_GPIO_CLK,  ENABLE);                 //开启GPIOA时钟
  200.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,  ENABLE);            //开启APB2总线复用时钟
  201.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,  ENABLE);          //开启USART1时钟

  202.     //配置PB10 TX
  203.     GPIO_Init_Structure.GPIO_Mode  = GPIO_Mode_AF_PP;                //复用推挽
  204.     GPIO_Init_Structure.GPIO_Pin   = USART3_TX_GPIO_PIN;
  205.     GPIO_Init_Structure.GPIO_Speed = GPIO_Speed_10MHz;
  206.     GPIO_Init( USART3_GPIO_PORT, &GPIO_Init_Structure);

  207.     //配置PB11 RX
  208.     GPIO_Init_Structure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;                //复用推挽
  209.     GPIO_Init_Structure.GPIO_Pin   = USART3_RX_GPIO_PIN;
  210.     GPIO_Init( USART3_GPIO_PORT, &GPIO_Init_Structure);
  211.         
  212.     USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);        
  213.     USART_Init_Structure.USART_BaudRate = bound;                                          //波特率设置为115200
  214.     USART_Init_Structure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;       //硬件流控制为无
  215.     USART_Init_Structure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;                       //模式设为收和发
  216.     USART_Init_Structure.USART_Parity = USART_Parity_No;                                   //无校验位
  217.     USART_Init_Structure.USART_StopBits = USART_StopBits_1;                                //一位停止位
  218.     USART_Init_Structure.USART_WordLength = USART_WordLength_8b;                           //字长为8位   
  219.     USART_Init(USART3, &USART_Init_Structure);   
  220.     USART_Cmd(USART3, ENABLE);
  221.                
  222.                 //中断结构体配置
  223.                 NVIC_Init_Structure.NVIC_IRQChannel                         =   USART3_IRQn;
  224.                 NVIC_Init_Structure.NVIC_IRQChannelCmd           =   ENABLE;
  225.                 NVIC_Init_Structure.NVIC_IRQChannelPreemptionPriority  =  6;
  226.                 NVIC_Init_Structure.NVIC_IRQChannelSubPriority         =  0;
  227.                 NVIC_Init(&NVIC_Init_Structure);
  228. }




  229. void USART3_IRQHandler(void)                        //串口1中断服务程序
  230. {
  231.         u8 Res;

  232.         if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  233.                 {
  234.                                 Res =USART_ReceiveData(USART3);        
  235.                                 USART_SendData(DEBUG_USARTx,Res);    //这里是把ESP8266发送到串口3的消息发送到电脑端串口调试助手,便于调试
  236.                         
  237.                                 if(Res != 'A')                     //以‘A’为结束位,收到‘A’表示一次接收消息完成
  238.                                         {
  239.                                                 if((USART3_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据
  240.                                                 {
  241.                                                                 USART3_RX_BUF[USART3_RX_STA++]=Res;        //记录接收到的值         
  242.                                                 }
  243.                                                 else
  244.                                                 {
  245.                                                         USART3_RX_STA|=1<<15;                                //没有收到结束符‘A’,收到的字节数>=0x80,强制标记接收完成
  246.                                                 }
  247.                                                 
  248.                                         }
  249.                                        
  250.                                         else
  251.                                         {
  252.                                                 USART3_RX_STA|=1<<15;                                //接收消息完成
  253.                                         }
  254.         
  255.         }
  256.                                 
  257. }

  258. void u3_printf(char* fmt,...)  
  259. {  
  260.         u16 i,j;
  261.         va_list ap;
  262.         va_start(ap,fmt);
  263.         vsprintf((char*)USART_RX_BUF,fmt,ap);
  264.         va_end(ap);
  265.         i=strlen((const char*)USART_RX_BUF);                //此次发送数据的长度
  266.         for(j=0;j<i;j++)                                                        //循环发送数据
  267.         {
  268.           while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕   
  269.                 USART_SendData(USART3,USART_RX_BUF[j]);
  270.         }
  271. }

  272. #endif



  273. /*=============================通过发送函数==============================*/
  274. /**
  275. * 功能:串口写字节函数
  276. * 参数1:USARTx :串口号
  277. * 参数2:Data   :需写入的字节
  278. * 返回值:None
  279. */
  280. void USART_Send_Byte(USART_TypeDef* USARTx, uint16_t Data)
  281. {
  282.     USART_SendData(USARTx, Data);
  283.     while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE)==RESET);
  284. }
  285. /**
  286. * 功能:串口写字符串函数
  287. * 参数1:USARTx :串口号
  288. * 参数2:str    :需写入的字符串
  289. * 返回值:None
  290. */
  291. void USART_Send_String(USART_TypeDef* USARTx, char *str)
  292. {
  293.     uint16_t i=0;
  294.     do
  295.     {
  296.         USART_Send_Byte(USARTx,  *(str+i));
  297.         i++;
  298.     }
  299.     while(*(str + i) != '\0');

  300.     while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
  301. }
复制代码

main.c

  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "FreeRTOS.h"
  6. #include "task.h"
  7. #include "key.h"
  8. #include "string.h"
  9. #include "dht11.h"

  10. /*========================FreeRtos读取温湿度=======================
  11. *Author:小殷同学

  12. *Date:2022-5

  13. *Description: 通过蓝牙将获取的温湿度数据每隔一秒发送一次到手机
  14. ==================================================================*/



  15. //任务优先级
  16. #define START_TASK_PRIO                1
  17. //任务堆栈大小        
  18. #define START_STK_SIZE                 250  
  19. //任务句柄
  20. TaskHandle_t StartTask_Handler;
  21. //任务函数
  22. void start_task(void *pvParameters);

  23. //任务优先级
  24. #define LED0_TASK_PRIO                2
  25. //任务堆栈大小        
  26. #define LED0_STK_SIZE                 50  
  27. //任务句柄
  28. TaskHandle_t LED0Task_Handler;
  29. //任务函数
  30. void led0_task(void *pvParameters);

  31. //任务优先级
  32. #define UsartControal_TASK_PRIO                3
  33. //任务堆栈大小        
  34. #define UsartControal_STK_SIZE                 120  
  35. //任务句柄
  36. TaskHandle_t UsartControalTask_Handler;
  37. //任务函数
  38. void UsartControal_task(void *pvParameters);



  39. int main(void)
  40. {
  41.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4         
  42.         delay_init();                                            //延时函数初始化         
  43.         uart_init(115200);                                        //初始化串口
  44.         usart_init2(9600);          //蓝牙使用

  45.         LED_Init();                                                          //初始化LED
  46.         
  47.         
  48.         printf("初始化完成Start Test\n");
  49.          
  50.         //创建开始任务
  51.     xTaskCreate((TaskFunction_t )start_task,            //任务函数
  52.                 (const char*    )"start_task",          //任务名称
  53.                 (uint16_t       )START_STK_SIZE,        //任务堆栈大小
  54.                 (void*          )NULL,                  //传递给任务函数的参数
  55.                 (UBaseType_t    )START_TASK_PRIO,       //任务优先级
  56.                 (TaskHandle_t*  )&StartTask_Handler);   //任务句柄              
  57.     vTaskStartScheduler();          //开启任务调度
  58. }


  59. //开始任务任务函数
  60. void start_task(void *pvParameters)
  61. {
  62.     taskENTER_CRITICAL();           //进入临界区
  63.     //创建LED0任务
  64.     xTaskCreate((TaskFunction_t )led0_task,            
  65.                 (const char*    )"led0_task",           
  66.                 (uint16_t       )LED0_STK_SIZE,
  67.                 (void*          )NULL,                                
  68.                 (UBaseType_t    )LED0_TASK_PRIO,        
  69.                 (TaskHandle_t*  )&LED0Task_Handler);   
  70.     //蓝牙串口控制
  71.     xTaskCreate((TaskFunction_t )UsartControal_task,     
  72.                 (const char*    )"UsartControal_task",   
  73.                 (uint16_t       )UsartControal_STK_SIZE,
  74.                 (void*          )NULL,
  75.                 (UBaseType_t    )UsartControal_TASK_PRIO,
  76.                 (TaskHandle_t*  )&UsartControalTask_Handler);  

  77.     vTaskDelete(StartTask_Handler); //删除开始任务
  78.     taskEXIT_CRITICAL();            //退出临界区
  79. }

  80. //LED0任务函数

  81. void led0_task(void *pvParameters)
  82. {
  83.         while(1)
  84.         {
  85.                 LED0 = ~LED0;
  86.                 vTaskDelay(1000);
  87.                 printf("led0_task  Running\r\n");
  88.         }
  89. }



  90. //温湿度数据读取 将获取的数据每隔1s通过蓝牙发送到手机
  91. void UsartControal_task(void *pvParameters)
  92. {
  93.                 uint16_t i;
  94.                 uint8_t k;
  95.                 uint8_t kk;
  96.                 uint8_t kkk;
  97.           uint8_t Temp_Buffer[20];  //发送数据缓存
  98.                 while(1)
  99.                         {
  100.                                 
  101.                                 DHT11_UpdateData(); //读取温湿度
  102.                                 i =  Rxbuff[0]+ Rxbuff[1]+Rxbuff[2]+ Rxbuff[3];
  103.                                 if(Rxbuff[4] ==i)   //进行效验判断
  104.                                 {
  105.                                         k=Rxbuff[2];
  106.                                         kk=Rxbuff[0];
  107.                                         kkk=Rxbuff[3];
  108.                                         sprintf((char *)Temp_Buffer,"当前温度为:%d 当前湿度为:%d\r\n",k,kk);
  109.                                         USART_Send_String(USART2,(char *)Temp_Buffer);
  110.                                 }
  111.                                 memset(Temp_Buffer,0,sizeof(Temp_Buffer)); //清空缓存
  112.                                 delay_ms(1000);
  113.                                 
  114.                
  115.                         }
  116.                                 
  117. }
复制代码

实验结果


140d1de8a2a7420d90195aacf26fc4b0.png

————————————————
版权声明:@slow-walker


收藏 评论0 发布时间:2022-10-26 23:07

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版