Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
cubemx
RT-Thread Studio
rttstudio和cubemx
发布于 2022-04-12 14:20:42 浏览:983
订阅该版
在art-pi模板的基础上做项目开发,加上了can和eth,想更改fdcan1的引脚,本来不想用cubemx,但在工程里始终没有找到在哪里配置引脚,没办法用cubemx,生成代码后把CAN的初始化代码拷贝到了board.c中,编译通不过,显示一个宏定义没定义,那么找到定义的头文件incliude进去,编译->没用,直接把宏定义的值代替进去,更多的错误。 大家用studio顺利吗?或是我用了半个月还不熟悉?
查看更多
lchnu
2022-04-14
Witness, Understand, Skill
@888Tim 你好!不要打赏,点赞即可。 1.开启FDCAN  2.编译出现118个错误。因为HAL中没有使能FDCAN  3.在`board->CubeMX_Config->Core->Inc的stm32h7xx_hal_conf.h`文件中开启FDCAN模块  4.编译无误。但是实际上,这里只是表示程序驱动部分无误。实际硬件与FDCAN还没有做匹配。Cubemx生成的代码中,底层硬件部分,都是使用HAL_XX_MspInit函数处理的。 5.在`board->CubeMX_Config->Core->Src的stm32h7xx_hal_msp.c`文件中设置FDCAN1的硬件引脚。 ```c /** * @brief FDCAN MSP Initialization * This function configures the hardware resources used in this example * @param hfdcan: FDCAN handle pointer * @retval None */ void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan) { GPIO_InitTypeDef GPIO_InitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; if(hfdcan->Instance==FDCAN1) { /* USER CODE BEGIN FDCAN1_MspInit 0 */ /* USER CODE END FDCAN1_MspInit 0 */ /** Initializes the peripherals clock */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FDCAN; PeriphClkInitStruct.FdcanClockSelection = RCC_FDCANCLKSOURCE_PLL; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); } /* Peripheral clock enable */ __HAL_RCC_FDCAN_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /**FDCAN1 GPIO Configuration PH14 ------> FDCAN1_RX PB9 ------> FDCAN1_TX */ GPIO_InitStruct.Pin = GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1; HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* USER CODE BEGIN FDCAN1_MspInit 1 */ /* USER CODE END FDCAN1_MspInit 1 */ } } /** * @brief FDCAN MSP De-Initialization * This function freeze the hardware resources used in this example * @param hfdcan: FDCAN handle pointer * @retval None */ void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* hfdcan) { if(hfdcan->Instance==FDCAN1) { /* USER CODE BEGIN FDCAN1_MspDeInit 0 */ /* USER CODE END FDCAN1_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_FDCAN_CLK_DISABLE(); /**FDCAN1 GPIO Configuration PH14 ------> FDCAN1_RX PB9 ------> FDCAN1_TX */ HAL_GPIO_DeInit(GPIOH, GPIO_PIN_14); HAL_GPIO_DeInit(GPIOB, GPIO_PIN_9); /* USER CODE BEGIN FDCAN1_MspDeInit 1 */ /* USER CODE END FDCAN1_MspDeInit 1 */ } } ```  5.屏蔽上述代码中第22行的Error_Handler即可。你也可以改成你希望的引脚。至于HAL_FDCAN_MspInit函数中,RCC部分是否有必要,建议你读一下drv_fdcan.c中的初始化部分,若重复了,则删除上述函数中的rcc即可。我没有用过,但是思路是没有问题的。 6.编译无误  7.进一步说明,在`board->CubeMX_Config->Core->Src的stm32h7xx_hal_msp.c`包含了ART-PI硬件上的各种外设的驱动。Studio挺好用的,关键是你要熟悉/习惯它对工程管理的逻辑。我是比较忌讳用cubemx联动、直接复制其他工程的conf.h等设置文件的操作。 给你展示的工程编译结果,就是在前天帮你配置ETH的ART-PI工程上处理的,我还没有删除,所以放心大胆使用。 若FDCAN数据收发不正常,你要确认引脚是否配置正确,硬件连接是否无误,时钟配置是否正确,CAN总线的速率是否设置正确。 8.补充说明 另外,认真读了本贴中你和其他坛友的对话,你对于Cube MX+Studio的理解是有问题的。 CubeMX作用就是按照图形化的各种引脚配置,生成硬件驱动程序,如各种MX_GPIO_Init、HAL_XXX_MspInit函数等,若配置正确,将相当于硬件已经正常驱动了。而我们写的应用程序,则调用诸如HAL_USART_Transmit之类的函数,实现相应功能。 RT-Thread作为OS,将硬件驱动部分,如drv_xx.c,基于HAL库再封装了一次,有些对用户透明的意思在里面。以本次的FDCAN驱动为例,drv_fdcan.c中会调用HAL_FDCAN_Init,而在HAL_FDCAN_Init中,会调用HAL_FDCAN_MspInit。HAL_FDCAN_MspInit的作用是底层硬件初始化,你需要配置引脚、时钟、中断等。 所以,无论是使用ENV,还是Studio,结合CubeMX的作用仅仅在于用到HAL_xxx_MspInit的部分。官方代码/CSP/BSP已经替用户考虑了很多,我们要做的就是硬件部分做好配置即可。 最后,你基于ART-PI做了基本的ETH,CAN,但是想在自己的电路板上运行,我建议依然在官方BSP上进行修改。 关闭`board->CubeMX_Config->Core->Src的stm32h7xx_hal_msp.c`中一些你没有用到的外设,按照你的实际电路进行配置,这样速度反而快。你现在对Studio还不熟悉,涉及到Sconscript等处理起来有些难度,若直接从0开始配置,时间成本太高了。 祝顺利!
3
个回答
默认排序
按发布时间排序
嚜軒公告
2022-04-12
努力中
建议先学习一下 studio的用法,rtt他用的是api,一般自己不涉及引脚
crystal266
2022-04-12
嵌入式
提示的错误是什么?你是不是 没有使能相应的设备驱动 或者 在 board.h 中没有开启相应的宏定义
撰写答案
登录
注册新账号
关注者
0
被浏览
983
关于作者
Tim_PC
这家伙很懒,什么也没写!
提问
34
回答
10
被采纳
0
关注TA
发私信
相关问题
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
ART-Pi2移植CMSIS-DAP(基于CherryUSB协议栈)
2
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
3
RT-Thread中的time溢出问题,时间戳溢出,解决方法
4
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
5
SystemView线程名字不显示
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
9
个答案
2
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
lizimu
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部