IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 开发GD32遇到的坑B点 -> 正文阅读

[嵌入式]开发GD32遇到的坑B点

前言

更换工作回到了智能家居行业,使用了GD32F103CB这个芯片,几年前用过stm32。公司的同事都在使用stm32的库函数来开发GD32的芯片,我就觉得特别的别扭,然后我就将公司项目独自使用了gd32的库函数,毕竟配套还是好的,而且还有一个有点就是,gd的主频可以达到相同类型的芯片108M,stm32的只有72M。但是更换的过程中,那种煎熬也是令人难忘的。下面就记录几个特殊的地方把。

问题1:

智能家居行业需要的按键特别多,因此会使用矩阵方式的按键。矩阵按键,那就要说下了,2*4的6个PIN脚,组合成8个按键,4行两列方式。这就需要随时更改PIN脚的输入输出模式,随时切换。不要在意字体好不好看哦
如图:
在这里插入图片描述
两列永远是输入状态,然后4行,4行先全部设置为输入状态,然后,把PB10设置为输出模式,当PB10设置为高电平后,读取PA5的状态,如果读取到高电平 ,那么证明key1被按下了,然后在把4行都设置为输入状态,在把PA6设置为输出,紧接着设置为高电平,读取PA5的状态,如果是高点平,证明按键key2被按下,其余按键都是这么来弄。
在stm32上面,没问题,但是当我移植到GD32上面就出问题了。
在这里插入图片描述
如图,箭头所指的那个语句在stm32上面不会存在,但是如果在GD32上面不加,就出问题了,不加上拉低,当第二个按键检测的时候,虽然按了key1,但是key2同样会检测到,也就是说电平在设置了输入以后,会依旧保持高电平,而且这个现象只会在PB端口上面出现,下面的按键都是PA端口就不会出现问题,你说气人不。

问题2:

PB12作为定时器引脚,这个在stm32上面也存在
只是解决发了时间比较多,在此记录下。
我们的灯要做可调节灯光的,采取的是可控硅方式控制。这个时候就需要对220V进行过零检测。而选择的引脚就是PB12.这个引脚配置为中断引脚。下面图片是正确的写法。下面我来说下
在这里插入图片描述
首先为了排除干扰,将整体代码全部注释,只留下过零检测外部中断引脚的方式。查看数据手册,发现PB12,不是什么特殊引脚,不用重映射之类的内容。第一个,开PB端口的定时器,设置为输入引脚,绑定中断线。一切OK。但是给了过零,竟然不进入中断函数,疑惑之后测试PB10,一摸一样的配置,PB10 完美运行,这就尴尬了不是。继续查看手册,PB10,PB12,都没有特殊的引脚。最后经过一系列的测试,竟然发现要打开AFIO的时钟。查找资料” STM32 的所有 GPIO 都引入到 EXTI 外部中断线上,使得所有的 GPIO 都能作为外部中断的输入源。所以如果把 GPIO 用作 EXTI 外部中断时,还需要开启 AFIO 时钟。“

https://blog.csdn.net/weixin_46323814/article/details/125606876网友对PB12引脚做为外部中断引脚说明配置
最后问题解决了。
特别说下,当你不开AFIO时钟的时候,触发外部中断有时候也是可以的,偶尔成功,当我触碰中断引脚用手摸一下,晃动一下,都会进来中断。写代码都写出迷信了。

问题3:

因为我们的调灯采取的是可控硅方式,通过检测过零,通过曲线方式控制模拟的PWM波形。这个时候需要开一个定时器,要非常准确的,而且必须大约在10US,注意了是微秒。然后我依旧拿的是GD32的库使用,同事使用的是STM32的库,没有出现问题,但是我来使用GD库就出问题了。你说说气人不。搞得好像就只有我能够遇到这种奇葩问题,多次这种感觉,怀疑自己能力,要被辞退了都。
进入正题,因为定时器非常的快。这个时候要特别注意抢占时间的NVIC的问题了,我拿到的是官方的demo.
特别注意下面这个图:
在这里插入图片描述
这个是我修改后的,原来这个滴答定时器的优先级设置的是0,0是最高的意思。首先我们要明白,滴答定时器就是一个普通在不能普通的定时器,不太准确的延时了,可以使用下,如果一要排序了,比如串口中断优先级了,那么这个滴答时钟,一定是最低的,但是demo竟然给最高,一个不注意就拿来主义了,之后不会关注。
我们的项目使用了4个定时器+一个串口,都设置了优先级,唯独没注意这个滴答时钟的。结果出现了奇葩时间。只留下过零检测程序,然后程序内容是上升沿打开引脚高电平,下降沿打开引脚低电平,按照过零电路来说,最后进入上升沿和下降沿的次数一定是一样的,但是结果测试就是不一样,上升沿次数进入的越来越多,下降沿之间拉开差距了,通过示波器发现,及其不均衡,但是等待2分钟后,波形就稳定了,偶尔出现不一致,给你感觉这个芯片太垃圾了。经过一系列的分析,最后锁定滴答定时器的优先级问题。给的太高了。
然后我就查看stm32为什么没问题他给的是多少:
如图:
在这里插入图片描述
看看人家给的多低呀,就得这么干,这就是stm32不出问题的原因。
如果你做的项目平时对时许要求不那么严格,发现不了这些问题,我是i因为做灯控,如果差了一点点,灯光就会晃动。因此发现的。在此记录下。
说实话不太敢用GD的库了,但是也理解毕竟国产要发展STM32的库在中国10几年已经被无数人挖坑填坑了。
接下来看看继续有什么坑可以遇到,在继续分享记录把。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:33:13  更:2022-09-13 11:37:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:29:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码