深圳市盐田区住房建设局网站,wordpress字体编辑插件下载,大丰有没有做网站,网站建设与管理.pdfGD32HAL库开发问题 1can初始化进入error handle2发送邮箱不能按照填写顺序发送3 GD32修改代码被stm32cudemx覆盖问题 1can初始化进入error handle
HAL库的HAL_CAN_Init中#xff0c;hcan-Instance-MSR寄存器无法清零#xff0c;STM32先清零#xff0c;再退出睡眠模… GD32HAL库开发问题 1can初始化进入error handle2发送邮箱不能按照填写顺序发送3 GD32修改代码被stm32cudemx覆盖问题 1can初始化进入error handle
HAL库的HAL_CAN_Init中hcan-Instance-MSR寄存器无法清零STM32先清零再退出睡眠模式而GD32需要先退出才能清零 while ((hcan-Instance-MSR CAN_MSR_INAK) 0U) {if ((HAL_GetTick() - tickstart) CAN_TIMEOUT_VALUE) {/* Update error code */hcan-ErrorCode | HAL_CAN_ERROR_TIMEOUT;/* Change CAN state */hcan-State HAL_CAN_STATE_ERROR;return HAL_ERROR;}再其前面加上退出睡眠语句即可 #if defined(GD32F407xx)CLEAR_BIT(hcan-Instance-MCR, CAN_MCR_SLEEP);#endif/* Wait initialisation acknowledge */while ((hcan-Instance-MSR CAN_MSR_INAK) 0U) {if ((HAL_GetTick() - tickstart) CAN_TIMEOUT_VALUE) {/* Update error code */hcan-ErrorCode | HAL_CAN_ERROR_TIMEOUT;/* Change CAN state */hcan-State HAL_CAN_STATE_ERROR;return HAL_ERROR;}}2发送邮箱不能按照填写顺序发送
配置了发送邮箱按照填写邮箱的先后顺序发送ST可以按照顺序发送而GD不行 查看HAL_CAN_AddTxMessage里面发现transmitmailbox (tsr CAN_TSR_CODE) CAN_TSR_CODE_Pos获取的GD32空闲的邮箱不对 /* Select an empty transmit mailbox */transmitmailbox (tsr CAN_TSR_CODE) CAN_TSR_CODE_Pos;/* Check transmit mailbox value */if (transmitmailbox 2U) {/* Update error code */hcan-ErrorCode | HAL_CAN_ERROR_INTERNAL;return HAL_ERROR;}对比文档发现CAN_TSR_CODE的寄存器ST和GD定义不一样ST表示的是空闲邮箱而GD表示下一个发送邮箱 通过TMEx获取空闲邮箱后正常 if (((tsr CAN_TSR_TME0) ! 0U) || ((tsr CAN_TSR_TME1) ! 0U) || ((tsr CAN_TSR_TME2) ! 0U)) {/* Select an empty transmit mailbox */transmitmailbox (tsr CAN_TSR_CODE) CAN_TSR_CODE_Pos;#if defined(GD32F407xx)if (CAN_TSR_TME0 (tsr CAN_TSR_TME0)) {transmitmailbox 0;} else if (CAN_TSR_TME1 (tsr CAN_TSR_TME1)) {transmitmailbox 1;} else if (CAN_TSR_TME2 (tsr CAN_TSR_TME2)) {transmitmailbox 2;} else {transmitmailbox 3;}#endif/* Check transmit mailbox value */if (transmitmailbox 2U) {/* Update error code */hcan-ErrorCode | HAL_CAN_ERROR_INTERNAL;return HAL_ERROR;}3 GD32修改代码被stm32cudemx覆盖问题
在上面中对GD32不一样的地方加入了GD32F407xx预处理命令在KEIL或stm32cubeid中定义该宏就可以编译可以加入GD32代码但是每次重新生成代码都会被覆盖。在库文件里面修改改文件后cubemx生成文件时从库复制过来就是修改后的文件。 对应的库文件路径在C:\Users\用户名\STM32Cube\Repository\STM32Cube_FW_F4_V1.27.1\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_can.c