Clion开发STM32——添加自己文件

本文讲述了在使用CLion时遇到的CMakeLists.txt配置问题,通过修改CMakeLists_template.txt来避免覆盖,以及处理编译过程中LINKER_SCRIPT自动添加的问题,最终成功解决了编译过程中的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加自己的文件如下
在这里插入图片描述

报错clion No such file or directory
有网上有教程,让修改CMakeLists.txt
在这里插入图片描述
这样可以是可以,但是每次重新生成代码,会被重新覆盖
在这里插入图片描述
参考大佬@范子琪的文章。修改CMakeLists_template.txt即

### STM32作为Modbus RTU主站的驱动实现 #### 实现背景 为了使STM32能够充当Modbus RTU主站的角色,需要完成一系列特定的任务。这不仅涉及到硬件连接的设计,还包括软件层面的编程工作。具体来说,在编写用于控制和通信的程序之前,应先了解目标系统的架构以及所需遵循的标准协议[^1]。 #### 软件环境搭建 采用CLion作为开发工具,并利用MSYS2来建立编译环境。这样的组合提供了强大的编辑器特性和便捷的操作体验,有助于提高开发效率。此外,还需确保已安装适合于STM32系列微控制器的GCC交叉编译器和其他必要的库文件[^2]。 #### Modbus RTU 主站初始化 在开始任何数据交换操作前,必须正确配置USART接口参数以匹配从设备的要求。通常情况下,波特率、停止位数、校验方式等都需要被设定好。下面给出一段简单的C语言代码片段用来展示如何初始化USART外设: ```c void USART_Init(void){ /* 初始化USART*/ huart1.Instance = USART1; huart1.Init.BaudRate = 9600; // 设置波特率为9600bps huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; HAL_UART_Init(&huart1); } ``` 这段代码展示了基本的UART/USART初始化过程,其中包含了设置波特率、字长、停止位数量等内容。这些设置应当依据实际应用场景中的需求来进行调整[^4]。 #### 构建请求帧并发送给从站 当USART准备好之后,就可以构建符合Modbus RTU标准的消息帧并向远程节点发出查询命令了。这里提供了一个简化版的例子说明怎样构造读取寄存器值的功能调用: ```c uint8_t modbus_request[]={ 0x01, // 设备地址 (Slave Address) 0x03, // 功能码(Function Code),这里是读保持寄存器(Read Holding Registers) 0x00, 0x00, // 寄存器起始位置(Register Start Address) 0x00, 0x0A, // 请求的数量(Number of Registers to Read), 即10个寄存器 }; // 添加CRC校验码... crc16_add(modbus_request); HAL_UART_Transmit(&huart1, modbus_request, sizeof(modbus_request), HAL_MAX_DELAY); ``` 上述代码中定义了一条针对编号为`0x01`的目标设备发起的读取指令,它试图获取位于地址区间内的十个连续寄存器的数据。注意每次传输前后都要计算并附加循环冗余检验(CRC)值以保证消息完整性。 #### 接收来自从站的响应处理 一旦发送出去的信息得到了回应,则需对接收到的数据包进行解析。考虑到可能存在错误情况的发生,建议加入相应的异常检测逻辑以便及时发现潜在问题。以下是接收端的部分伪代码表示形式: ```c if(HAL_UART_Receive(&huart1, response_buffer, RESPONSE_SIZE_EXPECTED, TIMEOUT)){ if(crc_check(response_buffer)){ // 如果CRC验证通过 parse_response_data(response_buffer); // 解析返回的有效负载部分 }else{ handle_crc_error(); // 处理CRC不一致的情况 } }else{ timeout_handler(); // 应对超时未接收到回复的情形 } ``` 以上步骤构成了一个完整的交互周期——即由主控单元向子模块询问信息直至获得反馈为止的过程描述。当然,实际情况可能会更加复杂一些,比如还需要考虑多台设备间的轮询调度等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值