资讯详情

STM32+二氧化碳传感器(FS00301)

配置串口4

uart.c

u8 USART4_RX_BUF[USART_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节 u16 USART4_RX_STA=0;       //接收状态标记   void uart4_init(u32 bound){   //GPIO端口设置     GPIO_InitTypeDef GPIO_InitStructure;  USART_InitTypeDef USART_InitStructure;  NVIC_InitTypeDef NVIC_InitStructure;     RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能USART1,GPIOA时钟     //USART2_TX   GPIOA.9   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA.2   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出   GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA.9       //USART2_RX   GPIOA.10初始化   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PA3   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;///浮空输入   GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA.10      //Usart1 NVIC 配置   NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级1  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //子优先级1  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能  NVIC_Init(&NVIC_InitStructure); ///根据指定参数初始化VIC寄存器       //USART 初始化设置   USART_InitStructure.USART_BaudRate = bound;//串口波特率  USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式  USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位  USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;///无硬件数据流控制  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式    USART_Init(UART4, &USART_InitStructure); ///初始化串口1   USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);///打开串口接受中断   USART_Cmd(UART4, ENABLE);                    //使能串口1   } void UART4_Send_Data(u8 *buf,u16 len) {     u16 t;      for(t=0;t<len;t  )        //循环发送数据     {         while(USART_GetFlagStatus(UART4,USART_FLAG_TC)==RESET); //循环发送,直到发送完成         USART_SendData(UART4,buf[t]);     }     while(USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET);  }    void UART4_IRQHandler(void)                 //串口1中断服务程序  {  int Res;  if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)  ///接收中断(接收到的数据必须是0x0d 0x0a结尾)   {   Res =USART_ReceiveData(UART4); ////读取收到的数据  if(Res==0xff)     {      USART4_RX_STA=0;     //接收完成      }    else      {       USART4_RX_BUF[USART4_RX_STA]=Res ;      USART4_RX_STA  ;        }        }     //  USART_ClearFlag(UART4,USART_IT_RXNE); ///必须清除接收中断    } 

uart.h

#ifndef __USART_H #define __USART_H #include "stdio.h"  #include "sys.h"  #define USART_REC_LEN     20   ///定义最大接收字节数 200 extern u16 USART4_RX_STA;           //接收状态标记  extern u8  USART4_RX_BUF[USART_REC_LEN]; void uart4_init(u32 bound); void UART4_Send_Data(u8 *buf,u16 len);

二氧化碳传感器

CO2.C

#include "CO2.h"       /************************************************** 计算二氧化碳值的函数 **************************************************/ int hextoDec(int hex) {   int sum=0,mul=1;   int i,r;   int count=0;   do{    r=hex;    for(i=0;i<count;i  )     mul*=16;    mul*=r;    sum =mul;    mul=1;    count  ;    }while(hex/=16);   return sum; }     /************************************************** 命令发送给二氧化碳 **************************************************/ void DATA(void) {  int i;  u8 tr[]={0xff,0x01,0xa0,0x00,0x00,0x00,0x00,0x00,0x5f};   for(i=0;i<9;i  )    {       while((UART4->SR&0x0080)==0);          UART4->DR=tr[i];         } }  

CO2.H

#ifndef __CO2_H #define __CO2_H #include "stdio.h"  #include "sys.h"  #include "usart.h"   int hextoDec(int hex); void DATA(void);   #endif    

主函数 main.c

#include "led.h" #include "delay.h" #include "CO2.h" #include "sys.h" #include "usart.h" #include "stdio.h"  int main(void)  {     u16 i,CO2;    u16 CO2H,CO2L;  delay_init();       //延迟函数初始化     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2抢占优先级,二位响应优先级  uart_init(9600);  //串口初始化为115200  uart4_init(9600);   LED2_Init();        //LED端口初始化    while(1)   {    DATA();    for(i=0;i<5;i  )    delay_ms(1000);    CO2H=hextoDec(USART4_RX_BUF[3]);    CO2L=hextoDec(USART4_RX_BUF[4]);    CO2=CO2H*256 CO2L;    printf("%d\r\n",CO2);    for(i=0;i<5;i  )    delay_ms(1000);   }     }

标签: 8f8h传感器375pa传感器3008pa传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台