在art-pi模板的基础上做项目开发,加上了can和eth,想更改fdcan1的引脚,本来不想用cubemx,但在工程里始终没有找到在哪里配置引脚,没办法用cubemx,生成代码后把CAN的初始化代码拷贝到了board.c中,编译通不过,显示一个宏定义没定义,那么找到定义的头文件incliude进去,编译->没用,直接把宏定义的值代替进去,更多的错误。
大家用studio顺利吗?或是我用了半个月还不熟悉?
@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的硬件引脚。
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开始配置,时间成本太高了。
祝顺利!
@lchnu 老师,谢谢您!