关于使用BJX-LINK-001调试stm8s系列主控问题

关于使用BJX-LINK-001调试stm8s系列主控问题工作需要 最近忙于调试一款 2 4G 无线芯片解决方案 采用的芯片是 ARF2496K 该芯片要求外部供电 3 3V 所以不能直接使用普通的 C51 控制 除非接转换芯片 AT89S52 STC89C52 都没有用武之处了 所以主控选型初步定为 STM8S 系列 最终调试时所使用的为 STM8S103F3

大家好,我是讯享网,很高兴认识大家。

      工作需要,最近忙于调试一款2.4G无线芯片解决方案,采用的芯片是ARF2496K,该芯片要求外部供电3.3V,所以不能直接使用普通的C51控制,除非接转换芯片。AT89S52、STC89C52都没有用武之处了,所以主控选型初步定为STM8S系列,最终调试时所使用的为STM8S103F3。

     一开始,我们使用的是由博巨兴提供的方案,主控为BJX8F101BTG,其实这片芯片的核心就是STM8S。外加一个仿真器BJX-LINK-001,按我的理解这也就是ST-LINK仿真器。

     第一步,就是确定主控能正常工作,STM8S的最小系统是在淘宝上直接购买了一块STM8S103F3小核心板,这个板子自带两个LED灯,一个用于指示电源,另一个可供I/O控制。而且将所有的管脚都引出来了,很方便外接ARF2496K芯片。拿到这板后,自己焊接了排针,万用表测试线路是正常的了。

      万事俱备,开工了,打开一个控制LED灯的程序,准备烧录时,发现一个错误: “chip does not answer” ,如下图:


讯享网


初步怀疑我芯片的问题,换了一块核心板还是这样,便掉转矛头考虑是不是仿真器的问题,在GOOGLE搜索chip does not answer ,答案各种各样,没有什么进展,但得到一个信息就是供电的问题,检查BJX-LINK时发现竟然没有输出电压,查看自带的手册,发现这手册问题很多,讲的都不怎么清楚,示意图也比较模糊。于是认为这个仿真器坏了,最后联系博巨兴,他们那边给出的解释是板子需要另外供电,原来如此,果然,在给芯片供电后一切正常。LED灯闪了。

       第二步就是考虑移植ARF2496K代码了,参考ARF2496K datasheet,初步完成一些函数的封装,如SPI操作。最之前还不确定这ARF2496K芯片是不是好的,所以必须先能正常读取内部寄存器值才能往下做开发。

       这里遇到个让我纠结了好久的问题,调试时示波器也查看了,管脚也测过了都是正常的,没想到竟然最后的问题出在了FWLIB1.0库的GPIO_ReadInputPin函数上。

代码片段如下:

    

u8 rf_spi_read(void) { u8 i,val = 0; BitStatus d; for(i = 0;i < 8;i++) { val <<= 1; d=GPIO_ReadInputPin(ARF_PORT,TRSDAT); //ARF_PORT 就是GPIOC, //if (GPIO_ReadInputPin(ARF_PORT,TRSDAT)==1) //检测TRSDAT位是不是为高 if(GPIOC->IDR&TRSDAT) //检测TRSDAT位是不是为高 val |= 1; TRSCLK_U; nop();nop();nop(); TRSCLK_D; } return val; }

讯享网之前并没有使用   if(GPIOC->IDR&TRSDAT) 这种方式,而是使用的库函数if(GPIO_ReadInputPin(ARF_PORT,TRSDAT)==1),但总是没有进入过,一开始以为是其它如延时,访问时序的问题所致,将那些代码仔细检查过了都没有问题。于是考虑将GPIO_ReadInputPin(ARF_PORT,TRSDAT)读出来看看,是什么玩意。d=GPIO_ReadInputPin(ARF_PORT,TRSDAT); 总是返回为0 也就是RESET状态。

        原型如下:

讯享网BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin) { return ((BitStatus)(GPIOx->IDR & (u8)GPIO_Pin)); }

typedef enum { RESET = 0, SET = !RESET } FlagStatus, ITStatus, BitStatus;

       注意这里存在一个使用上的问题,这个函数是不能这样判断的  if(GPIO_ReadInputPin(GPIOC,TRSDAT)==1) ,这是错误的,按库函数的意思是,返回非0就表示是高电平。一定得注意。但我出现的问题并不在这里,而是这个函数总是返回0,如下图:


TRSDAT是连接在PC3口,这里PC_IDR 为0x88    b 第3位为1,意味着是存在高电平的,但变量d的值仍是0 RESET,操蛋了个去。

接着往下执行,下图:

完全正常,可问题就是为什么这

讯享网GPIO_ReadInputPin(ARF_PORT,TRSDAT)
就不正常呢???? 

反正是可以正常读出寄存器值了,接着往下写驱动了。

总结:

      BJX8F101BTG 就是STM8S系列,但有些管脚上的微微差别。

      BJX-LINK-001仿真器就是ST-LINK。

      出现"chip does not answer" 很可能需要给板子供电。

小讯
上一篇 2025-03-11 17:41
下一篇 2025-03-11 21:56

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/16713.html