关于CH32库函数与STM32库函数的区别-程序员宅基地

技术标签: stm32  STM32  嵌入式硬件  arm  单片机  

最近想用MPU6050六轴传感器来控制小车的90°精确转弯和保持直行,但手头没有多余的STM32F1的板子,恰好有两个CH32F103的最小系统板,所以想着把程序简单移植一下就可以了,没想到在此过程中却遇到了困难。
由于本人使用的时CH32官方的库函数,而大家用的最多的驱动代码差不多基于STM32开发,所以在移植过程中千万要小心。

1、以下为 CH32F10X_ 库函数中关于GPIO的相关寄存器与STM32不同的地方:

左边CH32官方库函数,右边为ST32官方库函数,所在文件 "ch/stm32f10x_gpio.c "
在这里插入图片描述

在使用入IIC或者DHT11等一个IO同时兼顾输入和输出能力的时候,尤其需要注意I/O方向配置,图中配置寄存器的名称不同,使用时需注意修改。
【新】最近在一次配置CH32F13的I/O时又遇到这个问题,之前将STM32的程序移植到CH32上,发现有错误,提示找不到BSRR。 error:  #136: struct ""  has no field "BSRR"
随即我打开工程文件,找到这个 BSRR,因为在该头文件中通用输入输出的GPIO结构体中有明确的定义。
32通用输入输出寄存器定义
从图中对比可以看的出,CH32的这些结构体成员的名称与STM32的存在差别,所以如果在你使用到输入输入的IO操作时,需要注意,对应修改正确即可。其底层寄存器地址就STM32F103与CH32F103是一致的,不妨做个有趣的实验,那就是使用CH标准库编写程序烧录到ST的芯片中,然后是使用ST的标准库编写程序烧录到CH的芯片中,观察运行。那么这个时候我想你应该感受到了吧,其实他们是可以通用的,所以在不要求库的限制下,随便用基本没什么问题。

  • 记一点,凡是程序移植过程中出现此类问题,将程序中的相关定义修改为当前库中的定义的即可(xx32f10x对应文件中)
2、除此之外,本人还发现在USART配置时,个别寄存器名称也不相同,如在使用printf函数打印输出的重定向函数中:

在这里插入图片描述
由此可见,他们为了做区分,在细节处是动了自己的一点小心思的。但是 别忘了他们使用相同的ARM架构 Cortex - M3内核,同样的32位MCU,于是查了他们的固件库函数,发现常用寄存器除名称不同外其地址和长度完全一样,到这大家都懂了吧,个别地方稍微注意一下下,然后直接使用STM32固件库函数不就完事了,当然了CH的程序也可以直接烧录到ST上运行。

3、后续可能会专门讲一下 国产ARM架构 32位 MCU 与STM32的使用区别,有时间的话 哈哈~
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Guard_Byte/article/details/125597836

智能推荐

图像线段检测几种方法_lines1, _, _, _ = lsd1.detect(gray_image1, 2, 2)-程序员宅基地

文章浏览阅读1.1k次。OpenCV-contrib有一个名为FastLineDetector的东西,如果它被用作LSD的替代品似乎很好。如果你有点感动,你会得到与LSD几乎相同的结果。当我将OpenCV提升到4.1.0时,LineSegmentDetector(LSD)消失了。_lines1, _, _, _ = lsd1.detect(gray_image1, 2, 2)

为什么人工智能用Python?-程序员宅基地

文章浏览阅读923次,点赞24次,收藏27次。Python 作为脚本语言,虽然上手简单、入门快,但是运行速度没有Java、C++快,应用也不够广泛,那Python到底有什么优势?来听听王道Python的主讲老师龙哥怎么说?Python被认为是一门相对容易学习和上手的编程语言,对初学者友好。其简洁的语法和清晰的代码结构使得开发人员能够更专注于解决问题而不是处理语法复杂性。这使得开发人员能够轻松地利用这些工具进行人工智能项目的开发。例如最流行的机器学习框架Scikit-learn只支持Python。

Python实例29:利用python自动创建多个Excel表格_python在excel表格内添加多张表-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏19次。实例代码import xlwings as xwapp = xw.App(visible = True, add_book = False)for i in range(1, 21): workbook = app.books.add() workbook.save(f'e:\\example\\{i}班信息表.xlsx') workbook.close()app.quit()_python在excel表格内添加多张表

uni-app实现上拉加载,下拉刷新(下拉带动画)_uniapp 加载动画-程序员宅基地

文章浏览阅读5.7w次,点赞14次,收藏81次。直接代码展示了uni-app的上拉加载动画感觉还行,废话不多说了。。。1在pages.json添加允许下拉刷新{ "path":"pages/lookuser/lookuser", "style":{ "navigationBarTitleText":"用户日志", "enablePullDownRefresh": true//就是这个 }_uniapp 加载动画

常见服务器对jdk版本的支持_jdk 不支持国产服务器-程序员宅基地

文章浏览阅读2.6k次。WebSphere5.1:JDK1.4,Servelet2.3、JSP1.2WebSphere6.0:JDK1.4,Servelet2.4、JSP2.0WebSphere6.1:JDK5.0,Servelet2.4、JSP2.0Tomcat4.1:JDK1.4,Servelet2.3、JSP1.2Tomcat5.5:JDK5.0,Servelet2.4、JSP2.0_jdk 不支持国产服务器

mysql55dialect_关于数据库方言MySQLDialect、MySQL5Dialect、MySQL55Dialect、MySQL57Dialect、MySQL8Dialect之间的区别与联系...-程序员宅基地

文章浏览阅读657次。什么是Hibernate方言?Hibernate方言是用来告诉Hibernte如何对指定的数据库生成相应的SQL语句。尽管做了很多尝试去使SQL语句标准化,但是不同的数据库支持的SQL语句还是有很多不同的地方。所以Hibernate使用方言来辅助生成正确的SQL语句。①MySQLDialect②MySQL5Dialect③MySQL55Dialect④MySQL57Dialect⑤MySQL8Di..._mysql5dialect

随便推点

剑灵力士卡刀ahk_技术宅分享 剑灵召唤一键卡刀代码使用教程-程序员宅基地

文章浏览阅读1.2k次。半自动读取f左右键模式,全自动读取1,2,f左右键模式。要鼠标有侧键,没侧键的我看心情帮你们改改……毕竟帖子老是沉,很不爽下面发代码,要写入ahk。代码1:全自动识别1,2,F,左右键,鼠标侧上键启动#IfWinActive ahk_class LaunchUnrealUWindowsClientXButton1::loop{send {1}sleep 10send {f}sleep 10send..._ahk剑灵

学习MarkDown的一点学习笔记,分享给大家!_markdown分享给别人看-程序员宅基地

文章浏览阅读685次。学习MarkDown的一点学习笔记,分享给大家!在之前写了两篇博客,后来让好友看了下,也查重自身原因,找出一下几点问题文章逻辑思维不够明晰文章整体上的结构有些杂乱,不够审美标准为此在一天的时间里面简要的看了看markdown的具体语法,本着学习一回就搞透的想法,写了一篇类似于小练习的笔记,分享给大家,希望对你们有帮助我认为这个笔记的好处有一下几点百度出来的语法,全是长篇幅的介绍,过于繁琐长_markdown分享给别人看

计算机应用技术专业是属于文科生,计算机应用技术专业是文科还是理科-程序员宅基地

文章浏览阅读2.1k次。导读:本篇文章由盛启琼整理发布,主要讲的是计算机应用技术专业是文科还是理科。共有165名用户参与了本文互动,热门互动有:计算机应用技术是文科还是理科专业?计算机专业属于文科还是理科计算机应用技术专业是文科还是理科 就业方向有哪些计算机专业有哪些。。 是文科还是理科计算机应用技术专业属于文科还是理科 就业前景怎么样&nbsp,以下是计算机应用技术专业是文科还是理科的详细内容..._陕工院计算机应用技术招文科生吗

Linux 硬件时间(RTC time(2),热度飙升-程序员宅基地

文章浏览阅读229次,点赞4次,收藏6次。硬件时间,也被称为实时时钟(RTC),是指计算机主板上的一个独立于操作系统的设备,它在电源关闭甚至断电情况下也能保持运行。其功能是记录当前的日期和时间。系统时间是计算机内部使用的时间,它通常在启动时从RTC设置,然后由系统时钟进行跟踪。系统时钟是操作系统内核的一部分,可以以毫秒或纳秒级别提供精确时间。本地时间是系统时间经过时区转换后的时间。时区是根据地理位置确定的,全球分为24个时区,每个时区大约代表15度的经度。例如,北京时间是UTC+8,而伦敦时间是UTC+0。

〖产品思维训练白宝书 - 产品思维认知篇⑤〗- 学习 [产品思维] 需要做哪些准备?_产品思维学习-程序员宅基地

文章浏览阅读3.2w次,点赞45次,收藏30次。这一章节的目的是希望在正式的学习 "产品思维" 的知识点之前,让大家能够做好准备(包括心理准备与身体上的准备),整个准备过程也是参考的产品经理的闭环工作模式来设计的。_产品思维学习

uni-app 配置编译环境与动态修改manifest,2024年最新android基础面试题及答案-程序员宅基地

文章浏览阅读208次。但是这时候又碰到了一个问题。不同的网络环境,可能还需要配置不同的小程序appid。作为一个慵懒的程序员,根据不同的网络环境,手动去修改appid那是不可能的。【注意】:复制上述代码的时候,记得把备注删除。通过以上,根据不同的编译方式,可以自动的切换不同的网络环境。重要事情说三遍(可视化创建的项目,在项目的根目录下)。二、动态修改manifest.json参数。动态配置appid,本质就是要动态配置。由以上可知,需要修改的是。1、创建如下项目结构配置。3、对应网络环境域名配置。

推荐文章

热门文章

相关标签