GD32替换STM32使用HAL库开发问题

news2024/9/20 16:38:51

GD32HAL库开发问题

    • 1can初始化进入error handle
    • 2发送邮箱不能按照填写顺序发送
    • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1238522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv5 分类模型 OpenCV和PyTorch两者实现预处理的差异

YOLOv5 分类模型 OpenCV和PyTorch两者实现预处理的差异 flyfish PyTorch封装了PIL库 简单对比下两者的使用方法 import cv2 from PIL import Image import numpy as npfull_path_file_name"/media/a//ILSVRC2012_val_00001244.JPEG"#OpenCV读取图像默认是BGR顺序 …

防止恶意攻击,服务器DDoS防御软件科普

作为一种恶意的攻击方式,DDoS攻击正以超出服务器承受能力的流量淹没网站,让网站变得不可用。近几年,这种攻击持续增多,由此优秀服务器DDoS防御软件的需求也随之增长。那么如何选择服务器DDoS防御软件,从根本上根除DDoS…

美国云服务器:CN2/纯国际/高防线路介绍

​  谈到国外云服务器,美国云服务器必有一席之地。但是,一般来说使用美国云服务器,线路质量是一个重要的考虑因素。如果线路选择不合理,就有可能造成速度减慢或者安全隐患问题产生。本文将介绍美国云服务器的CN2/纯国际/高防三种…

【MATLAB源码-第86期】基于matlab的QC-LDPC码性能仿真,输出误码率曲线。

操作环境: MATLAB 2022a 1、算法描述 QC-LDPC(准循环低密度奇偶校验)编码是一种高效的错误校正编码方式,广泛应用于通信系统和数据存储中以提高数据的可靠性。它是低密度奇偶校验(LDPC)编码的一种特殊形…

【计算机方向】通信、算法、自动化、机器人、电子电气、计算机工程、控制工程、计算机视觉~~~~~合集!!!

◆本文为大家梳理了近期可投的EI国际会议,涵盖计算机各个学科方向,均可EI检索 本期EI会议汇总合集涵盖领域:计算机视觉、物联网、算法、通信、智能技术、人工智能、人机交互、机器人、电子电气等众多领域! 本期所推荐的EI会议有…

AIGC前沿技术与数字创新应用合作交流和论坛发布活动圆满落幕

2023年11月17日下午,AIGC前沿技术与数字创新应用合作交流和论坛发布活动在北京市海淀区牡丹科技楼B座B1报告厅成功举办。 在这个以技术为驱动力的时代,AIGC等这些前沿技术正以惊人的速度改变着我们的生活和产业格局。利用新兴技术和数字化工具来解决问题…

CNVD-2023-12632:泛微E-cology9 browserjsp SQL注入漏洞复现 [附POC]

文章目录 泛微E-cology9 browserjsp SQL注入漏洞(CNVD-2023-12632)漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 泛微E-cology9 browserjsp SQL注入漏洞(CNVD-2023-12632)漏洞复现 [附POC] 0x…

AIOps探索 | 应急处置中排障的降本增效方法探索(上)

文章来源:公众号ID-布博士(擎创科技资深产品专家) 哈喽~友友们大家好,最近运维界也是蛮热闹的,前有语雀多次崩溃,后有阿里全系产品集体故障,不管是哪种,都足够逼疯一个运维工程师。…

Power Apps-Timer

插入一个计时器 右侧属性面板,持续时间的单位是毫秒,60000就是60秒(一分钟);开启重复是指60秒结束后重新开始计时;自动启动是指当从其他页面进入时是否自动开始计时;自动暂停是指当离开这个页面…

Android:Google三方库之Firebase集成详细步骤(一)

前提条件 安装最新版本的 Android Studio,或更新为最新版本。使用您的 Google 账号登录 Firebase请注意,依赖于 Google Play 服务的 Firebase SDK 要求设备或模拟器上必须安装 Google Play 服务 将Firebase添加到应用: 方式:使用…

vue3中v-for报错 ‘item‘ is of type ‘unknown‘

报错 在写vue3ts的项目,得到一个数组,需要循环展示,使用v-for循环,写完之后发现有个报错,如下: 解决 props的时候使用PropType将数据类型完整标注即可 以为没有显示的表示出list中item的类型&#xff…

除夕不放假HR如何做

国务院办公厅发布了 关于2024年部分节假日安排的通知 全文如下 各省、自治区、直辖市人民政府,国务院各部委、各直属机构: 经国务院批准,现将2024年元旦、春节、清明节、劳动节、端午节、中秋节和国庆节放假调休日期的具体安排通知如下。 …

企业如何选择一款高效的ETL工具

企业如何选择一款高效的ETL工具? 在企业发展至一定规模后,构建数据仓库(Data Warehouse)和商业智能(BI)系统成为重要举措。在这个过程中,选择一款易于使用且功能强大的ETL平台至关重要,因为数…

【问题定位】通过看Mybatis源码解决系统问题

开发需求好好的,运维同事突然发现了一个问题,某个任务的详情页面加载不出来。看日志,系统在进行查询操作的时候抛出空指针异常。感觉是Mybatis内部异常,所以就跟踪源码看下Mybatis运行到哪一步报错的。 DefaultSqlSession#select…

二、Gitee使用方法

目录 (1)首先可以注册一个 gitee 账号,注册很方便,自行注册 (2)登陆后进入你的主页 (3)创建仓库 (3)克隆 (4)代码提交 &#xf…

SQLite3 数据库学习(四):Qt 数据库基础操作

参考引用 SQLite 权威指南&#xff08;第二版&#xff09;SQLite3 入门 1. 创建连接执行 sql 语句 在 Qt 中使用数据库要在工程文件中添加QT sql1.1 main.cpp #include "createsqlapp.h" #include <QApplication> #include <QSqlDatabase> #include &l…

vite构建项目不能使用require解决方案

在utils文件夹下创建一个getImgUrl.ts文件 /** vite的特殊性, 需要处理图片 */ export const require (imgPath: string) > {try {const handlePath imgPath.replace(, ..)console.log(handlePath::, imgPath)return new URL(handlePath, import.meta.url).href} catch (…

微信怎么设置自动回复?

自动回复的用处 微信自动回复可以提高沟通效率。当你无法立即回复消息时&#xff0c;设置自动回复可以让对方知道你的情况&#xff0c;并且不会因为长时间没有回复而产生误解或不满。 微信自动回复可以节省时间和精力。如果你经常收到类似的询问或回复&#xff0c;通过设置自动…