STM32 Hal库移植到GD32上遇到的问题
问题一描述:CAN初始化就返回到Error_Handler,无法初始化通过。
经过单步调试,程序一直while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U)卡在这步,无法退出休眠模式响应,直到超时:
/* Exit from sleep mode */CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP);/* Get tick */tickstart = HAL_GetTick();/* Check Sleep mode leave acknowledge */while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 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;}}
原因分析:
通过示波器抓到波形,发现CAN_RX引脚一直时低电平,而在初始化时,是有上拉的(CAN要上线的话必须等待RX上有足够长的"隐性"信号,如果没有加收发器或者没有上拉的话,这个RX上的信号是不对的,所以就会超时了):
所以,软件配置是没有错的。需要确认硬件,发现硬件CAN芯片有边东,由之前的TJA1042改成了TJA1042T/3/1J,由于时间原因,没有具体去分析两者之间的区别(待有时间再去分析)。直接替换成之前的TJA1042即正常。
解决方案:
替换了芯片原因导致,换回之前的TJA1042芯片即可。
问题二描述:串口接收不到数据
在调试过程中,因为用到的串口比较多,数据接收比较频繁,其中某一路串口一直接收不到数据,其他的串口正常。
原因分析:
因为串口数据接收比较频繁,各路串口的优先级配置都是一样,发现某一路串口一直出现ORE错误,导致此路串口数据接收不到,一直进入ORE错误处理函数中。
解决方案:
针对不同的串口接收,按照数据的输出频率和接收数据优先级进行重新分配,针对每一组串口对ORE错误处理。
问题三描述:每次从boot跳到App后,就立马进入hardfault。
单独跑APP的代码没问题,每次从Boot跳到APP后,就立马进入hardfault。无法进入main入口。
原因分析:
单步调试发现,应用每次SystemInit完成后,一退出SystemInit进入main,就进入hardfault。发现程序根本没办法运行,可是单独跑boot和app都没问题,就说明boot和app代码都是没问题的。整合后在一起就出问题。而整合后只有代码空间变大,所以,怀疑是不是因为芯片选型导致。经过一番查找,终于在keil—>Option—>debug—>settings—>Flash Download—>Programming Algorithm中选择的文件仍然还stm32的,导致flash空间范围不对。
![在这里插入图片描述](https://img-
解决方案:
重新选择GD32的文件即可:
STM32 Hal库移植到GD32上遇到的问题相关推荐
- STM32 HAL库详解 及 手动移植
源: STM32 HAL库详解 及 手动移植
- STM32 HAL库、标准外设库、LL库(STM32 Embedded Software)
STM32 Embedded Software 工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL库 三种.前两者都是常 ...
- STM32 HAL库学习笔记1-HAL库简介
STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...
- STM32 HAL库详解
STM32 HAL库整体总结 STM32 之二 HAL库详解 及 手动移植 本篇博客是对以上参考资源的一个二次总结与整理. 1. HAL库文件结构 对于开发人员而言,首先要清楚 HAL 库的文件结构. ...
- stm32 HAL库分析之CAN
stm32 HAL库分析之CAN 阻塞发送 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) ...
- STM32 HAL库组成概述
STM32 HAL库概述 ## (一)HAL库设计思想 什么是HAL(Hardware Abstraction Layer)? from 百度百科: 硬件抽象层是位于操作系统内核与硬件电路之间的接口层 ...
- [STM32F1]基于STM32 HAL库实现鼠标键盘摇杆的USB复合设备
序: 其实这样一个设备我们在ch32v103上实现过,但移植到STM32 HAL库上面,还是发现很多问题的,现在就移植过程给大家分享一下在基于STM32 HAL库实现鼠标键盘摇杆的USB复合设备的实现 ...
- 如何快速使用STM32 HAL库和涂鸦Wi-Fi模组进行通信
简介:本文将教大家如何使用STM32HAL库快速开发和涂鸦WIFI模组通信,接入涂鸦云. 实现功能:通过APP实时监测温湿度数据 程序下载路径:demo程序. demo(定时采集数据)程序. 一.使 ...
- STM32 HAL库学习笔记2 HAL库介绍
STM32 HAL库学习笔记2 HAL库介绍 CMSIS标准 一.再次认识HAL库 HAL库设计思想 HAL库实现方式 以GPIO模块为例 GPIO外设数据类型 GPIO外设接口函数 二.使用HAL库 ...
最新文章
- 12C expdp issue
- mysql5.6.42 力资源_MySQL5.6.42解压版安装教程
- 打开另外一个页面_如何在PDF页面中插入图片?
- Scrapy爬虫中的链接提取器LinkExtractor
- java 子类继承父类_关于Java 的继承问题,子类会继承父类的哪些东西?-----转载...
- php数组实例,php常用数组函数实例小结
- 团队编程项目开发环境搭建过程
- Python - 虚拟环境
- WordPress使用360CDN替换google服务,解决WordPress打开速度变慢问题
- Matlab~30个算法
- 贝叶斯决策论(一):贝叶斯决策理论
- 树莓派( Raspberry Pi )3B+ 能做什么?
- h2o api java_h2o H2OAutoEncoderEstimator
- 在UE5中嵌入浏览器
- 学习OpenCV 函数方法结构总结
- 关于人工智能,你知道怎么学吗
- 数据库访问性能优化(转)
- JConsole连接远程服务器方法
- Verilog HDL 程序设计(三)
- 如何学习python数据分析?
热门文章
- upload-labs第一关
- 【面经】华为od C/C++开发岗通过经验
- [个人疑问]为什么列表转集合后其长度的地址时变时不变?(未解决)
- 气象要素的基本属性和展现形式
- linux losetup命令,loop device介绍及losetup使用
- 计算机应用基础李雪第三版答案,计算机应用基础--李雪 第3章计算机的基础知识.ppt...
- SOA技术架构下时序图的一种表达方式
- Tikz 作图教程:pgfplots 宏包三维数据的可视化绘图
- 如何使用Python+Django+Mysql开发个性化职位推荐系统 招聘网站推荐系统 基于用户、项目的协同过滤推荐算法 基于内容、聚类、关联规则推荐算法WebPositionCFRSPython
- php 百度传课,百度传课KK