stm32f103通过485协议读取7合一传感器数据(温度、湿度、氮、磷、钾、ph、电导率)
本代码原章均为原创、盗发必究
作者手里因为暂时没有大一点的屏幕,所以直接摆烂用了一块0.96寸的屏幕,但并不影响使用,后期将使用机智云平台,通过4G,WIFL数据上云,实现手机查看数据,且将会继续开发,实现智能施肥、浇水、等等功能,既可以做一个很好的毕设,也可以实际落地作为一个完整的项目,作者会持续更新,请随时关注
文章展示部分代码,完整代码文章底部下载
硬件展示:
stm32f103c8t6系统板
0.96寸OLED显示屏幕
485转TTL模块
七合一土壤检测传感器485通信协议,宽电压5-30V
数据读取代码展示:
#include "user_usart.h"
/**
* @brief 配置嵌套向量中断控制器NVIC
* @param 无
* @retval 无
*/
char USART_flag;
char USART_data[20];
int i=0;
int USART_Ready=0;//数据接收完成标志
void DEBUG_USART_IRQHandler(void)
{
if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
{
USART_flag = USART_ReceiveData(DEBUG_USARTx);
if(USART_flag==0x01)//检测包头
{
USART_Ready=1;
}
else if(i==18)//捕捉完成18个字节数据
{
USART_Ready=0;
i=0;
}
if(USART_Ready==1)
{
USART_data[i]=USART_flag;
i++;
}
USART_ClearFlag(DEBUG_USARTx,USART_IT_RXNE);
}
}
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 嵌套向量中断控制器组选择 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* 配置USART为中断源 */
NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
/* 抢断优先级*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 子优先级 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* 使能中断 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* 初始化配置NVIC */
NVIC_Init(&NVIC_InitStructure);
}
/**
* @brief USART GPIO 配置,工作参数配置
* @param 无
* @retval 无
*/
void USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// 打开串口GPIO的时钟
DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
// 打开串口外设的时钟
DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
// 将USART Tx的GPIO配置为推挽复用模式
GPIO_InitStructure.GP