好久没用过STM8了,因为工作需要写了用STM8S103 36PIN芯片的仪表.主要用到串口和另一块主控板通讯,还有二个IO作为输出,一块8X6的数码屏,为了省事,直接103驱动数码,用了14P的管脚,然后通讯用了2P管脚,然后按键用了3P引脚.再就是检测一些状态和一些AD之类的,用了16P管脚,为了省事,直接上了一颗36PIN,没有使用数码屏驱动芯片.但是在网上查了资料很是担心,因为我要用到EEPROM存储仪表的设置,网上百度到资料说要3MS的时间,这样和我扫描LED的时间有点点的冲突,现在产品做好了,幸好屏没有闪,还是可以用的.
因为好久没用这颗芯片了,重新去网上下载了STM8的经典工具小青蛙,小青蛙有两个版本,一个1.0,一个是2.0对应于1.0库和2.0库,但是现在STM8最新的是2.2的库了,我重新用了2.2的库,然后小青蛙用2.0生成了函数输出,对了现在其实STM8也有CUBE,可以用这个工具,也很方便的.小青蛙其实是第一次用,以前STM8是汇编写的,那时STM8的芯片刚出来,网上有一篇STVD的教程,就按那个教程搭好,直接汇编撸的.这次当然是用C开发了,所以第一次用小青蛙,很方便,其实会玩STM32,也不需要小青蛙,STM8和STM32太相似了!!
把官网上载的解压,里面有库,把库放到自己的工程中,然后新建工程,再设置路径和选择STLINK工具,就可以了.然后就是不停地撸代码,写了也将近2周了,终于所有功能测试OK,特意EE发贴.
下面是这次用STM8遇到的一些问题,首先我以前用STM8有一个特别深的印象,那个VCAP脚的电容,非常难搞,因为质量,我用了直插的电容,结果1UF的电容,直接仿真器上仿真就失败了,后面换成了684电容可以仿真,现改成了684电容.
第二.我修改了库IO函数
BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin) {
return ((GPIOx->IDR & (uint8_t)GPIO_Pin) ? SET : RESET); }
我在网上查到这里要改成这样,因为我有一个IO是高低一次要计数,我放在MAIN的WHILE中计数值有点误差,后面改了这个函数.但是还是有疑惑,但目前能用,就改成这样.
第三.第3点是我的一个忽视了,有一个脚和芯片通讯没加上拉电阻,我加了了,可以用芯片通讯了.
一起发贴,分享经验,一个忠实的EE粉丝,
作者:很酷的蜜蜂猪.
引用: lcofjp 发表于 2020-3-28 11:55 酷叔,那个函数以前是啥样的,为啥要修改呀;
BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));
}
引用: lcofjp 发表于 2020-3-28 11:55 酷叔,那个函数以前是啥样的,为啥要修改呀;
设为上拉输入的时候,在检测到低电平后,并没有及时恢复到高电平的状态,相当于低电压来的时候,检测有点异常.
引用: lcofjp 发表于 2020-3-28 11:55 酷叔,那个函数以前是啥样的,为啥要修改呀;
队长,请叫我蜜蜂猪,蜜蜂是勤劳的表现,猪是因为我喜欢猪八戒.以后就叫我蜜蜂猪.
引用: long521 发表于 2020-3-28 13:00 队长,请叫我蜜蜂猪,蜜蜂是勤劳的表现,猪是因为我喜欢猪八戒.以后就叫我蜜蜂猪.
勤劳的酷叔你好,原来这个函数是可以读取多个引脚输入状态的,你改了之后只能读取一个了