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

      工作需要,最近忙于调试一款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” ,如下图:


仿真器肯定是没选错的,虽然他没有标明是STLINK,但换别的时候都提示错误。


初步怀疑我芯片的问题,换了一块核心板还是这样,便掉转矛头考虑是不是仿真器的问题,在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    10001000b 第3位为1,意味着是存在高电平的,但变量d的值仍是0 RESET,操蛋了个去。

接着往下执行,下图:

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

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


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


总结:

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

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

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

      使用库函数时一定注意用法,而且不能全信。

你可能感兴趣的:(嵌入式学习)