【基于STM32F1与RT-Thread的老旧电表物联改造工作——下位机端】

本文介绍了一个基于STM32的老旧电表物联改造项目,通过RT-Thread和STM32CUBEMX配置实现下位机开发。下位机使用串口1和串口3,采用485菊花链读取多个电表数据,通过4G模块以JSON格式上传至服务器。串口1接收电表数据并打包,串口3发送至服务器。项目涉及串口通信、数据处理和服务器对接,具备定时发送和错误处理机制。

该方法基于单位某园区的老旧电表物联改造工作项目,作者主要负责下位机端的选型制作与编写代码、以及和服务器端工程师进行对接,并对服务器编程进行了自学。
  
开发环境
  选用RT-Thread官方idea:RT-Thread Studio,并配合使用STM32官方开发环境STM32CUBEMX配置引脚,初学者可以通过该链接进行配置
RT-Thread Studio联合STM32CubeMX进行开发
  
系统流程
在这里插入图片描述
  该项目中,下位机使用json格式数据,定时将485菊花链连接的多个电表数据发送到服务器。STM32主要使用了串口1和串口3来进行通讯,串口1将数据转换成485信号,和电表进行指令的发送和数据的读取;串口3对串口1接受到的电表数据进行json格式打包,通过4G模块发送给服务器云端。

软件流程
在这里插入图片描述
测试代码
相关变量的定义

unsigned char usart_tx_data[89];	 //4G模块发送数组
unsigned char usart_485_send[8];     //485发送数组
uint8_t power_sum[20]={
   
   0};			 //电量存储数组	
uint8_t test_data[100]={
   
   0};

rt_mutex_t dynamic_mutex = RT_NULL;

char not_connect_4G=0;          //连接4G未成功次数
unsigned char receive_ok;		//统计电表接受次数

串口1接收数据回调函数

static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
   
   
    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */
    rt_sem_release(&rx_sem1);

    return RT_EOK;
}

串口1的相关线程

static void serial_thread_entry(void *parameter)
{
   
   
    char ch;
    char Con485_i = 0;
    while (1)
    {
   
   
        /* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */
        while (rt_device_read(serial1, -1, &ch, 1) != 1)
        {
   
   
            /* 阻塞等待接收信号量,等到信号量后再次读取数据 */
            rt_sem_take(&rx_sem1, RT_WAITING_FOREVER);
        }

        rt_device_write(serial1, 0, &ch, 1);
        //接收到了电表发来的数据

        receive_ok++;
        if(receive_ok == 4 )//接收到了四个电表的数据
        {
   
   
            Connect_4G();
            //清空、置FF操作
            receive_ok = 0;
            power_sum[4*Con485_i-1]=0xff;
            power_sum[4*Con485_i-4]=0xff;
            power_sum[4*Con485_i-2]=0xff;
            power_sum[4*Con485_i-3]=0xff;
            Con485_i = 0;
        }
        else
        {
   
   
            power_sum[4*Con485_i++]=ch;
        }
    }
}

串口1的初始化函数并导出到 msh 命令列表中(从命令行启动)

int uart_sample(void)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值