STM32 通过Modbus协议更改内部Flash(模仿EEPROM)的运行参数

news2024/11/17 9:33:56

main.c测试 

uint8_t uart1RxBuf[64]={0};

uint8_t Adc1ConvEnd=0;
uint8_t Adc2ConvEnd=0;

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  /* USER CODE BEGIN 2 */
  /* Debug: UART3 for debugging and printf */
  MX_USART3_UART_Init();

  /* Modbus: UART1 is used to transmit and receive modbus protocol */
  MX_USART1_UART_Init();
  HAL_UARTEx_ReceiveToIdle_IT(&huart1, (uint8_t *)&uart1RxBuf, 64);

  /* EEPROM */
  if(WriteDefaultEE()!=0)
  {
      Error_Handler();
  }

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
      /* Change flash operating parameters over modbus */
      Modbus_Event();

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}


/* USER CODE BEGIN 4 */
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
    if (huart->Instance == USART1)
    {
        if (huart->RxEventType == HAL_UART_RXEVENT_IDLE) {
            modbusData.reFlag=1;
            HAL_UARTEx_ReceiveToIdle_IT(&huart1, (uint8_t *)&uart1RxBuf, 64);//调用接收中断函数
        }
    }
    UNUSED(Size);
}


 CRC16校验

#include <stdio.h>
#include "stdint.h"

uint16_t ModRTU_CRC(const uint8_t buf[], uint8_t len)
{
    uint16_t crc = 0xFFFF;
    uint16_t pos = 0;
    uint8_t index = 0;

    for (pos = 0; pos < len; pos++)
    {
        crc ^= (unsigned int)buf[pos]; // XOR byte into least sig. byte of CRC

        for (index = 8; index != 0; index--) // Loop over each bit
        {
            if ((crc & 0x0001) != 0) // If the LSB is set
            {
                crc >>= 1; // Shift right and XOR 0xA001
                crc ^= 0xA001;
            }
            else // Else LSB is not set
            {
                crc >>= 1; // Just shift right
            }
        }
    }
    // Note, this number has low and high bytes swapped, so use it accordingly
    return crc;
}


int main()
{
	uint8_t buf[6]={0x0A ,0x03 ,0x00 ,0x00 ,0x00 ,0x07 };
	uint8_t crcval=0;
	
	crcval=ModRTU_CRC(buf,6);
	
	printf("%x \r\n",crcval);

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1499491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用腾讯云快速搭建WordPress网站流程详解

专栏系列文章&#xff1a; WordPress建站主题美化系列教程https://blog.csdn.net/seeker1994/category_12184577.html 一文搞懂WordPress是什么&#xff1f;为什么用它建站&#xff1f;怎么安装与部署&#xff1f; 初次安装WordPress后如何进行网站设置&#xff08;主题安装、…

阿里云k8s环境下,因slb限额导致的发布事故

一、背景 阿里云k8s容器&#xff0c;在发布java应用程序的时候&#xff0c;客户端访问出现500错误。 后端服务是健康且可用的&#xff0c;网关层大量500错误请求&#xff0c;slb没有流入和流出流量。 经过回滚&#xff0c;仍未能解决错误。可谓是一次血的教训&#xff0c;特…

数组与指针之二——二级指针之一

定义是这样&#xff1a; 多级指针&#xff08;二级指针&#xff09;&#xff0c;C语言多级指针的用法详解 (biancheng.net) 这是针对变量&#xff0c;且是一级一级的取的。但是我们经常要面对数组&#xff0c;用到二级指针。如前面第一篇所述&#xff0c;对一维数组名取地址&…

折扣价和折扣实时转换

背景 : react 项目 问题 : 在折扣数中输入折扣2.333333&#xff0c;中间会多很多0&#xff0c;输入2.222&#xff0c;不能正常输入到第三位 如下图 原因 : oFixed()数字转字符串时可能会导致精度问题 解决思路 : parseFloat来解析浮点数原代码 const calculateDiscountVal (p…

学习Java的第四天

目录 一、if选择结构 1、基本if选择结构 语法结构&#xff1a; 流程图&#xff1a; 示例&#xff1a; 2、if-else 选择结构 语法结构&#xff1a; 流程图&#xff1a; 示例&#xff1a; 3、多重if选择结构 语法结构&#xff1a; 流程图&#xff1a; 示例&#xff1a…

如何让JMeter也生成精美详细allure测试报告

&#xff08;全文约2000字&#xff0c;阅读约需5分钟&#xff0c;首发于公众号&#xff1a;测试开发研习社&#xff0c;欢迎关注&#xff09; 内容目录&#xff1a; 一、需求 二、思路 三、验证 四、实现 五、优化 六、彩蛋 篇幅较长&#xff0c;建议先收藏后阅读 一、需…

Java项目:42 ssm的高校专业信息管理系统设计与实现001

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统可以提供信息显示和相应服务 管理员查看学生报名专业&#xff0c;管理专业&#xff0c;课程以及学生&#xff0c;查看学生提问并回答问题&#x…

飞驰云联CEO朱旭光荣获“科技领军人才”称号

2024年2月29日&#xff0c;苏州工业园区“优化营商环境暨作风效能建设大会”成功举办&#xff0c;会上公布了2023年度苏州工业园区第十七届第一批金鸡湖科技领军人才名单&#xff0c;Ftrans飞驰云联创始人兼CEO朱旭光先生凭借在数据安全以及文件交换领域取得的突出成果&#xf…

浅谈高并发的一些解决思路

前言 《中国互联网发展状况统计报告》指出&#xff0c;截至2020年6月&#xff0c;我国网民规模已经达到9.40亿&#xff0c;较2020年3月年增长3625万&#xff0c;除了如此庞大的用户基数&#xff0c;如今人们接入互联网的方式也越来越多样&#xff0c;小到智能手表&#xff0c;…

MySQL存储函数

存储函数是有返回值存储过程&#xff0c;存储函数的参数只能还是IN类型的 1、语法 create function 存储函数名称 &#xff08;[参数列表]&#xff09;Returns type [characterrastic...]Begin--SQL语句Return ..;End;characterrastic说明&#xff1a;Deterministic:相同的输…

纯css实现太极八卦图

感觉最近好像闯鬼了&#xff0c;赶紧写个八卦图避避邪&#xff0c;开玩笑了&#xff0c;不废话&#xff0c;上菜&#xff0c;看效果上代码。 效果 代码&#xff0c;你们都是大佬&#xff0c;这里就不解释代码了 &#xff08;hover会转动喔&#xff09;。 <!DOCTYPE html&g…

Linux:kubernetes(k8s)探针LivenessProbe的使用(9)

他做的事情就是当我检测的一个东西他不在规定的时间内存在的话&#xff0c;我就让他重启&#xff0c;这个检测的目标可以是文件或者端口等 我这个是在上一章的基础之上继续操作&#xff0c;我会保留startupProbe探针让后看一下他俩的执行优先的一个效果 Linux&#xff1a;kuber…

图机器学习(3)-连接层面的特征工程

0 问题定义 通过已经连接去猜未知连接&#xff1a; 有两个思路&#xff1a;

金融行业专题|基金超融合架构转型与场景探索合集(2023版)

更新内容 更新 SmartX 超融合在基金行业的覆盖范围、部署规模与应用场景。更新信创云资源池、关键业务系统性能优化等场景实践。更多超融合金融核心生产业务场景实践&#xff0c;欢迎下载阅读电子书《金融核心生产业务场景探索文章合集》。 随着数字化经济的蓬勃发展&#xf…

WPF 消息提示 类似toast方式

WPF里面的消息提示一般都是MessageBox.Show()&#xff0c;这种样式不是很好看&#xff0c;所以就想办法重新搞了一个类似弹出消息的功能。原理很简单&#xff0c;就是弹出一个新窗体&#xff0c;然后等几秒窗体自动关闭。 先上效果图&#xff1a; 新建一个MsgHelper.cs类&…

板绘学习路线、技巧和日常练习-----线条基础(点线面)---持续补充

板绘学习路线、技巧和日常练习-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/136199248 虽然PS画线条可以用快捷键画&#xff0c;但是太AI了。我们需要线条包含更多的人性。所以通过我们心-脑-手&#xff0c;这样…

腾讯云2024年云服务器优惠价格表,不买后悔!

腾讯云服务器多少钱一年&#xff1f;61元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器165元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

滤波器:工作原理和分类及应用领域?|深圳比创达电子EMC

滤波器在电子领域中扮演着重要的角色&#xff0c;用于处理信号、抑制噪声以及滤除干扰。本文将详细介绍滤波器的工作原理、分类以及在各个应用领域中的具体应用。 一、滤波器的定义和作用 滤波器是一种电子设备&#xff0c;用于选择性地通过或阻塞特定频率范围内的信号。其主…

【小黑送书—第十一期】>>如何阅读“计算机界三大神书”之一 ——SICP(文末送书)

《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动全世界大学计算机科学技术教育的发展和成熟产生了很大影响。…