STM8S103飞线外接芯片,I2C不能得到slaveAddress应答,通讯失败。
测试标签123
IAR FOR ARM和IAR FOR STM8无法共存,
STM8L052,液晶内部电源怎么用?
STM8S105C6T6 UART2串口,能接收数据,不能发送数据
STM8S105K4 串口2 无奇偶校验,也能接收 偶校验的 数据
在STM8S的IAP使用中断和APP使用中断问题
STM8L151 SMBUS设计
STM8S103F复位异常
STM8L的LCD调试时不亮
微信公众号
手机版
程序单步跑过吗?
51是速度比较慢,并且是按顺序执行的。
STM32、STM8这种带几级流水的就不一样了,如果不加延时,两个IO一先一后操作,到执行的时候谁先谁后就没个准,因此IO有时序的话,之间加延时是必须的,可以很短,但不能没有。
用下面代码试试看
评分
查看全部评分
谢谢回复,你的这段代码早就用过,不行,单步跟过几回才发现的问题,最终的问题就出在取不出高位。实际上已经解决。我怀疑是编译器什么的问题,或者是坑
那你用的是哪个版本的IAR?是原版安装包吗?有没有破解过?
如果原版的,出这样的问题的话,比较不可思议。
一般来说,像这么低级的BUG,IAR编译器应该不会犯,机率不大。
仿真是在STC12C5A单片机下进行的,移植到STM8S103F下出的问题,问题解决以后感觉是个坑才在这里提出来的,如果是初学很难解决这样的问题,
刚刚回复过这个楼层,提示要审核,等到现在没看到,现在再回复一次
买STLINK2商家给的,版本2.20.3,应该够新的,破解了,能用的
你的sdata是什么类型的?
如果是unsigned char类型的,那么结果是0x80或0x00;肯定不会出现1
你要想出现1,则必须写成:
sdata = ( k & 0x80 ) && 0x80;
或者写成:
sdata = ( k & 0x80 )>>7;
或者写成:
sdata = ( k & 0x80 )?1:0;
说到底,这个是C语言功底的问题。
这个思路考虑过得,sdats是STM8的PC3位定义,问题已经解决,本帖的关键是同一个取最高位的语句在两个开发环境下的不同结果:
sdata = ( k & 0x80 ); //串行数据位取显示段码数据位的最高位
谢谢关注
这个问题解决方法很多,心里老是感觉别扭
刚刚看到。我在模拟串口LCD是初中常用取位函数,高低都可从来不出问题。我的做法通常不是将取位bit直接输出,而是有个中间变量获得后输出。例如:
//Write 1 byte to LCD,dt
void b2l(unsigned char dt,unsigned char com){
unsigned char i;
reg=com;//数据或命令寄存器
for(i=0;i<8;i++){
if(dt&0x80){dat=1;}else{dat=0;};//判断高位
dt=dt<<1;
wri();//调用写脉冲
}
}
如果是取低位,则与0x01与,左移即可。
评分
查看全部评分
这个PC_ODR_ODR3是什么东东?是操作寄存器的?还是直接操作寄存器的一bit的?如果是操作寄存器的,字节处理,那肯定就不对了,是一个字节赋值,永远是高位。
评分
查看全部评分