正点原子STM32H743阿波罗RTT+freemodbus接入

更新时间:2023-06-23 11:01:12 阅读: 评论:0

正点原⼦STM32H743阿波罗RTT+freemodbus接⼊⽬录
⼀、阿波罗开发板BSP制作
1.1 RTT源码下载
推荐两种⽅法:
1.从RT_Thread官⽹获取源码
2.git获取源码
两种⽅法均可获取RTT源码,依据个⼈习惯爱好来就⾏。
1.2 制作H743BSP
所需条件:
1.STM32CubeMX软件(引脚配置和时钟初始化),使⽤该⼯具需要电脑安装JAVA环境,不懂的可以知乎⼀下。;
2.RTT源码(我⽤的是4.0.1版本);
万事俱备,只⽋东风,hua ~ hua~ hua
⾸先,我们来看⼀下RTT源码⽬录结构。
既然是制作开发板的BSP,我们就主要关注该⽂件夹下的内容。
发现在rt-thread\bsp\stm32\docs⽬录下有STM32系列BSP制作教程.md⽂件,可能是悟性太低,我读了⼏遍都没理解到精髓所在,所以最后⾃⼰⼿动开始制作了。
RT-Thread软件包中有⼤量的bsp⽂件,现在将STM32H743阿波罗开发板作为移植对象,⾸先新建⼀个⼯程⽂件夹(这⾥取的⽂件夹名为RT-Thread_Projects,可任取),⾥⾯有四个⽂件夹docs、libraries、projects、rt-thread-4.0.1,分别保存⽂档、库⽂件、bsp⼯程⽂件、RT-Thread系统⽂件,这四个⽂件夹的内容来源如下表所⽰(下载的rt-thread-4.0.1源码在下表使⽤rt-thread-4.0.1-source表⽰):
⽂件夹名⽂件夹内容
rt-thread rt-thread-4.0.1-source中除bsp⽂件夹外所有内容;
libraries rt-thread-4.0.1-source\bsp\stm32\libraries中HAL_Drivers、STM32H7xx_HAL与Kconfig;
docs rt-thread-4.0.1-source\bsp\stm32\docs中内容;
projects rt-thread-4.0.1-source\bsp\stm32\libraries\templates中的stm32h7xx;
整理好后的⽬录结构如下图所⽰:
define
STM32H743阿波罗开发板,官⽅有移植好的代码,在.\rt-thread-4.0.1-source\bsp\stm32\stm32h743-atk-apollo⽬录下,因为想了解移植过程,所以并没有直接使⽤官⽅移植好的代码,⽽是使⽤.\rt-thread-4.0.1-source\bsp\stm32\libraries
\templates\stm32h7xx针对STM32H7系列的模板⽂件开始我们的系统移植,官⽅移植好的代码可以作为参考。
⾸先打开 .\RT-Thread_Projects\projects\stm32h7xx\board\CubeMX_Config⽬录下CubeMX_Config.ioc⽂件开始选择芯⽚型号并配置LED PIN与USART1,打开后芯⽚型号是STM32H743IITx,不⽤修改芯⽚型号,USART1、RCC时钟树也为配置好了,我们添加LED PIN(PB0和PB1)的引脚,配置如下图所⽰:
然后⽣成代码即可:
板级初始化需要⽤到CubeMX⽣成具体引脚的MspInit()与MspDeinit()函数,这两个函数⽣成在⽂
件projects\stm32h7xx\board\CubeMX_Config\Src\stm32h7xx_hal_msp.c中,在⽣成⼯程时,要将其包含进去,SConscript脚本中调⽤CubeMX⽣成⽂件的相关代码如下:
// projects\stm32h7xx\board\SConscript
import rtconfig
from building import *
cwd =GetCurrentDir()
# add the general drivers.
src =Glob('board.c')
src +=Glob('CubeMX_Config/Src/stm32h7xx_hal_msp.c')
path =[cwd]
path +=[cwd +'/CubeMX_Config/Inc']
开始修改代码,先将projects\stm32h7xx\board\CubeMX_Config\Src\main.c中的SystemClock_Config复制数学家的小故事简短4个
到projects\stm32h7xx\board\board.c中(根据使能的外设与时钟不同,该段代码可能不同,具体根据⾃⼰的配置修改),代码如下:
#include"board.h"
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct ={0};
RCC_ClkInitTypeDef RCC_ClkInitStruct ={0};
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct ={0};
/** Supply configuration update enable
*/
HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
/** Configure the main internal regulator output voltage
*/外国朋友
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
诊所消防应急预案
while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)){}
绝句的作者/** Initializes the CPU, AHB and APB buss clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;玛雅预言
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM =5;
RCC_OscInitStruct.PLL.PLLN =160;
RCC_OscInitStruct.PLL.PLLP =2;
RCC_OscInitStruct.PLL.PLLQ =2;
RCC_OscInitStruct.PLL.PLLR =2;
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
RCC_OscInitStruct.PLL.PLLFRACN =0;
if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK)
{
Error_Handler();
}给宝宝添加辅食
/** Initializes the CPU, AHB and APB buss clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
甲胎蛋白升高|RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2)!= HAL_OK)
{
Error_Handler();
}
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_USART1 |RCC_PERIPHCLK_SDMMC|RCC_PERIPHCLK_QSPI;
PeriphClkInitStruct.QspiClockSelection = RCC_QSPICLKSOURCE_D1HCLK;
PeriphClkInitStruct.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_PLL;
PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct)!= HAL_OK)
{
Error_Handler();
}
}

本文发布于:2023-06-23 11:01:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1020611.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:移植   代码   件夹   配置   开始   源码   内容   制作
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图