专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
基于stm32的室内空气质量监测
2019-07-21 02:17
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
4930
3
1018
我是一个小白,做这个题目的毕设,现在买了一个七合一的传感器模块,接到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热敏电阻,七合一的暂时没用过
加载中...
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#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;
pm2.5,co2, ntc热敏电阻,七合一的暂时没用过
一周热门 更多>