发新帖本帖赏金 300.00元(功能说明)我要提问
返回列表
打印
[APM32F0]

极海国产芯|我与极海国产芯的三次“碰撞”

[复制链接]
1047|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 woai32lala 于 2022-11-30 11:55 编辑

我与极海国产芯的三次“碰撞”
    在接触极海芯片之前,在大学学习了STC89C51、STM32、NXP系列的芯片,参加工作之后碰上芯片大涨价,公司临时采用HC32华大的芯片,后来遇到一些简单的项目,又接触到极海的芯片APM32F003,也就是极海芯片是我接触到的第五款芯片了,应该算是我是用过MCU中最小的一款了,性能还不错,价格也很适中,官网也很整洁,相关的资料一会就能找到,资料也很全,代理一般也会提供相应的技术支持,体验感相对来说还是很不错的,下面是极海官网截图。


      我们公司采用APM32F003F6P6芯片,主要想用它的ADC和SPI功能。    下面就是我跟极海芯片的三次碰撞:   
      第一次碰撞,公司想做一个多路ADC的采集设备,用了NTC测温,用了AIN4、AIN5和AIN6管脚,一共是2路,1路加热和1路制冷。下面是MCU部分的原理图。

     

      根据官方给的 例程,很快就写好了代码,烧录程序之后,程序在芯片中正常运行,但感觉才读出来的数据有问题,所以想在线调试一下看看哪里出了问题,问题来了,刚打开在线调试按钮是好的,点击开始运行,界面直接就卡死了,一开始我以为是线接触不好,但是后来经过多次仿真之后,每次一点击开始运行,界面准卡死,后来开始考虑到,可能是仿真和芯片有冲突。     

      一直就是找不到问题,然后挨个屏蔽代码,最后发现屏蔽到ADC初始化函数,程序可以正常仿真了,可以判断是ADC这部分代码的问题了,查了好长时间,发现ADC配置这边也没有什么问题,就很崩溃,然后就更改分频/时钟频率/ADC位数都不管用,最后改到扫描模式,他竟然好使了,也就是下面这部分配置。


此时是将扫描模式改为禁止了,一开始是使能扫描模式,那问题应该找到了,是ADC扫描模式的问题,单次转换模式就没有问题,只要切换到扫描模式就有问题,但是这是为什么呢,只有去翻找数据手册了,他的单次转换是对要转换的通道进行依次转换。

      下面是他单次转换,比如转换AIN4通道,他转换就完成了


      而我们再来看扫描模式,他竟然是从AIN0开始转换,到你结束的转换通道!!!!!


      然后我们惊奇的发现,下载口还是他的ADC转换口之一!!


       SWCLK是PD3管脚,也是ADC的AIN3,那问题找到了,就是因为用了扫描模式之后,在仿真的时候会读取AIN3管脚电压导致的仿真卡死,而正常程序运行不仿真没有问题,因为我们实时性要求还可以,因此我们改为单次转换完成切换通道在读取下一个通道,算是解决了这个问题,不知道官方能不能看到这个反馈,有没有方法硬件更改一下,像32他可以禁止JTAG管脚功能之类的,极海可不可以也能做到在仿真的时候把这几个管脚禁止他的功能,这是和极海芯片的第一次碰撞。

      第二次碰撞也是跟ADC有关系,是为了读取一个电池的电压,使用采集完成中断来读取的,期间还用了SPI 读取了一个集成按键模块TM1628,一开始读取按键工作还正常,但有次出门之后,回来发现,莫名其妙读回来一个按键被按下的标志位,就很嘛,谁趁着我出门偷偷按了他么吗,问了同事,同事说没人来过我这边,见了鬼了。然后断电重启设备重新运行,过了一会,他又返回一个按键按下标志,这时我意识到,这不像是个有人在搞怪,这TM是有Bug,查看了按键模块通讯频率,最大支持1M啊,我的才500Khz左右,怎么能读取错误,一开始以为是走线的问题,寄生电容太大导致,然后就疯狂降频率,降了频率之后发现错误又出现,看来还不是频率的问题。然后又是挨个屏蔽函数操作,屏蔽到ADC初始化后,通讯正常了,最终发现是ADC采集完成触发中断打断了SPI的读取,修改操作是用检测ADC采集完成的标志位来判断是否读取完成,再切换通道。


      第三次碰撞是在一次系统独立看门狗喂狗。
独立看门狗是用的内部RC晶振,这种晶振受温度影响比较大,当初测试是在夏天没有出现过问题,到了冬天之后,可能有的晶振会不稳定,理论内部晶振是128Khz,我们设置做了最大喂狗时间为4ms,已经是最长了时间了,但是系统经常会自动复位,一开始以为外部信号触发的抚慰,但是用示波器抓了波形之后,并不是外部RST管脚导致的芯片复位,那还有一种导致MCU复位的原因就是看门够了,在线调试查看RC内部真正的频率,竟然是132Khz,比128Khz多了一点,但是也不至于程序这么频率复位啊,程序上也没有这么耗时间的地方,但是看门狗肯定是有问题,继续查找看门狗发现设置时间有问题,最后发现确实例程库有问题。
      这是例程库看门口的基本历程,在初始化的时候获取了依次LIRC的时钟频率,在我们那块频率不正常的板子上,测得RC频率为130Khz。


而计算重装载值公式在初始化中


     计算公式 = 132000/512 ≈ 258
      而IWDT_SetReloadCounter这个函数的传参范围为无符号char类型,表示范围为0~255
这就破案了啊,传入258,直接溢出了啊,相当于传入重装载值为2个时钟周期啊!那指定这么点时间肯定来不及喂狗,肯定溢出了啊,这个例程有点相当不严谨,建议官方回去在核实一下,我们这边的解决方法是直接传入0xff解决了。
      以上就是和极海芯的三次“碰撞”,其实大家还是要对国产芯多点信心,大家都在成长,都还需要一段时间。
      最后希望极海国产芯越做越好。我与极海国产芯的三次“碰撞”

使用特权

评论回复

打赏榜单

Gfan 打赏了 300.00 元 2022-12-05
理由:恭喜获得极海国产芯悬赏贴活动的“最佳国产芯文博主”称号,感谢您的支持,期待下次的干货分享哦!

沙发
beyikyo| | 2022-11-30 10:31 | 只看该作者
支持一波!写的真的很认真

使用特权

评论回复
板凳
woai32lala|  楼主 | 2022-11-30 10:41 | 只看该作者
beyikyo 发表于 2022-11-30 10:31
支持一波!写的真的很认真

谢谢,虽然国产还有某些bug,还是要多多多支持国产

使用特权

评论回复
地板
两只袜子| | 2022-12-1 14:56 | 只看该作者
是的,支持支持国产才能给国更多的发展空间。

使用特权

评论回复
5
Gfan| | 2022-12-5 14:00 | 只看该作者
感谢您的支持与分享!

使用特权

评论回复
发新帖 本帖赏金 300.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

107

主题

534

帖子

5

粉丝