开发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几年已经被无数人挖坑填坑了。
接下来看看继续有什么坑可以遇到,在继续分享记录把。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于使用STM32CUBEMX开发GD32E103,你可以按照以下步骤进行配置: 1. 打开STM32CUBEMX软件; 2. 在选择器件界面中,选择GD32E103型号; 3. 在时钟配置中,配置晶振选项,确保与你的硬件配置相匹配; 4. 在外设配置中,根据你的需求进行配置,例如GPIO、UART、SPI等; 5. 在生成代码选项中,选择你希望生成的工程类型和IDE; 6. 击生成代码按钮,生成代码并保存; 7. 根据生成的代码,在相应的开发环境中进行编译和下载。 需要注意的是,尽管GD32E103与STM32芯片在硬件上有所差异,但是它们的寄存器地址和逻辑地址是相同的,因此你可以在STM32CUBEMX中选择对应的STM32型号来配置GD32E103。同时,你也可以使用ST的库进行开发,因为GD32系列是对GD32F103的升级和优化,所以它们之间是兼容的,通用外设几乎没有涉及到内核部分的差异。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [GD32替代STM32使用Cube MX的HAL库开发](https://blog.csdn.net/qq_26043945/article/details/124119246)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [GD32如何替换STM32?](https://blog.csdn.net/best_xiaolong/article/details/112504371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值