基于stm32的室内空气质量监测

2019-07-21 02:17发布

我是一个小白,做这个题目的毕设,现在买了一个七合一的传感器模块,接到32单片机需要写接收程序,但是不太懂怎么写,求各位大佬帮帮忙啊,问传感器店家要例程也没有。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
suheng1
1楼-- · 2019-07-21 03:59
自己找网上一段例程,改了一下个别参数,串口助手显示只有发送没有接收


#include "stm32f10x.h"
#include "usart.h"

//void uart_init(u32 bound)   //初始化串口1和串口2,函数的参数是波特率
//{
//  //GPIO端口设置
//  GPIO_InitTypeDef GPIO_InitStructure;
//    USART_InitTypeDef USART_InitStructure;
//    NVIC_InitTypeDef NVIC_InitStructure;

//    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);   //使能USART2,

//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   //使能GPIOA时钟

//    //USART2_TX   GPIOA.2
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //复用推挽输出
//  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

//  //USART2_RX     GPIOA.3初始化
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA.3
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
//  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA  

//  //Usart2 NVIC 配置
//  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
//    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
//    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;      //子优先级3
//    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //IRQ通道使能
//    NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器

//   //USART 初始化设置

//    USART_InitStructure.USART_BaudRate = 9600;//串口波特率
//    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(USART2, &USART_InitStructure); //初始化串口2
//  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断
//  USART_Cmd(USART2, ENABLE);                    //使能串口2


//
//}
//void USART2_IRQHandler(void)                    //串口2中断服务程序
//    {
//    u8 Res;
//    static char i=0, start=0;
//    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断
//        {

//            Res =USART_ReceiveData(USART2); //读取接收到的数据
//            //USART_SendData(USART1,Res);
//            if(Res == 0x3C) //如果接收的第一位数据是0X3C(这个是查看传感器的手册得知的)
//            {
//                USART_RX_STA = 0;     //让数组索引值从0开始
//                start = 1;  //这个变量是来确定第二位是否接收到了0X4D(这个也是查看传感器的手册得知的)
//            }

//            if(start == 1)
//            {
//                USART_RX_BUF[USART_RX_STA] = Res ; //把接收到的数据存到数组里面
//                USART_RX_STA++;
//                if(USART_RX_STA >= 17 && (USART_RX_BUF[1]==0x02))
//                    {
//                        //USART_SendData(USART1,USART_RX_BUF[2]*256+USART_RX_BUF[3]);
//                        printf("CO2:%d ",USART_RX_BUF[2]*256+USART_RX_BUF[3]);
//                        start  = 0;
//                        USART_RX_STA=0;//重新开始接收   
//                        USART_RX_BUF[0] = 0;
//                    }
//                }                  
//        }
//  }
//               
//        int fputc(int ch, FILE *f)
//{      
//    while((USART2->SR&0X40)==0);//循环发送,直到发送完毕   
//    USART2->DR = (u8) ch;      
//    return ch;
1599064432
2楼-- · 2019-07-21 05:41
首先你得先看懂传感器的使用说明,然后再写代码,,我写过pm2.5的,凑
1599064432
3楼-- · 2019-07-21 06:39
1599064432 发表于 2019-4-28 12:39
首先你得先看懂传感器的使用说明,然后再写代码,,我写过pm2.5的,凑

pm2.5,co2, ntc热敏电阻,七合一的暂时没用过

一周热门 更多>