手把手教你,通过HAL库实现MODBUS从机程序编写与调试(一)-----STM32CubeMX操作篇
2021/11/4 1:12:04
本文主要是介绍手把手教你,通过HAL库实现MODBUS从机程序编写与调试(一)-----STM32CubeMX操作篇,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
1、STM32CubeMX操作
1.1 新建工程
1.2芯片配置
1.2.1 时钟配置
1.2.2 串口的配置
1.2.3 定时器的配置
1.2.4 NVIC配置
1.2.5 工程设置
1、STM32CubeMX操作
1.1 新建工程
打开STM32CubeMX软件,File-->New Project。新建工程。
在打开的对话框内,在1处的Part Number文本框内输入STM32F103ZE,会在2处自动产生可以选择的芯片,在这里选择LQFP144封装的STM32F103ZETx系列的芯片。
1.2芯片配置
1.2.1 时钟配置
进入芯片配置界面,首先选择System Core选项下面的RCC,然后在弹出的High Speed Clock选项下选择Crystal/Ceramic Resonator。
点击3处的Clock Configuration,在弹出的界面,在1处输入输入72,系统会自动将其他的时钟调整为相对应的配置。
为了使生成的程序可以进行在线调试,重新点击1处的Pinout&Configuration,点击SYS,在Debug处点击Serial Wire。
1.2.2 串口的配置
在Pinout&Configuration选项卡下,选择Connectctivity下的UART4(可以根据自己的电路板的实际接口进行选择),Mode选择Asynchronous(异步模式)。
首先进行参数配置(Parameter Settings):
Basic Parameters:
Baud: 115200bit Bits/s 波特率
Word Length: 8Bits 字长
Parity: None 无校验
Stop Bits: 1 1位停止位
Advanced Parameters:
Data Direction: Receive and Transmit 既接收也发送
Over Sampling: 16 Samples
其次进行User Constant配置:
此项参数不变
再次进行NVIC setting配置:
此处将UART4 global interrupt进行使能,优先级等后续再进行配置。
DMA和GPIO配置不用更改。
1.2.3 定时器的配置
在modbus中,需要判断一帧什么时候发送结束,我们采用定时器进行判断。当定时器时间大于我们设定的时间时,发生定时器中断,告诉系统,一帧数据发送完成。
首先选择TIM7下的Parameter Settings,将PSC设置为7199,Counter Mode设置为UP,Counter Period 设置为39,Auto-reload preload设置为Enable。
在中断开启的情况下,中断时间为:
即超过4ms仍旧没有数据发送过来,证明一帧数据发送完成。
开启定时器的NVIC中断,即TIM7 global interrupt更改为Enable,此处优先级先不进行设置,等后续在NVIC中集中进行设置。
1.2.4 NVIC配置
在System Core选项下,选择NVIC,在NVIC的选项下,将Priority Group优先级分组设置为2位为pre-emption priority, 2位为subpriority。
然后将UART4的优先级设置为3,3低于TIM7的优先级3,2。证明当串口中断和时间中断同时来的时候,先相应时间中断。
1.2.5 工程设置
选择最上面的Project Manager的Project,首先对新建的工程命名为ModbusSlave,将Application Structure更改为Basic,最后将开发工具改成自己的开发工具,我这里用的是KEIL,这里选择MDK。
然后选择Code Generator,在这个界面将Generator peripheral initalization as a pair of '.c/.h' files per peripheral前面勾选上。
最后生成代码:
这篇关于手把手教你,通过HAL库实现MODBUS从机程序编写与调试(一)-----STM32CubeMX操作篇的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享