希望用过的朋友继续补充!!!!!
以上为转载,下面为自己的
1、
typedef union
{
struct
{
unsigned char abc:1;
unsigned char abc1:1;
unsigned char abc2:1;
unsigned char abc3:1;
unsigned char abc4:1;
unsigned char abc5:1;
unsigned char abc6:1;
unsigned char abc7:1;
}IE
unsigned char abc;
}ABC
ABC abcd;这一句只要加上__root 就OK了
最好写成 __root ABC abcd
2、
GPIO_Init(GPIO_CHECK_HANDER,CHECK_HANDER ,GPIO_MODE_IN_FL_NO_IT);
delay(5000);//切换后要等等久一点
if(GPIO_ReadInputPin(GPIO_CHECK_HANDER,CHECK_HANDER) )
3、
对齐方式
如1 ,abc为低位 abc7 为高位
ADC采集结果默认左对乐齐
4/adc
采集周期 14个时钟周期为采集一次
有时会出错,正常采集值为78 采到了13 15
要去掉一些错误值
5/若将PWM输出提至到极限 ARRL小于5后就会导致失真
6、某些I/0口 有特殊要求,或特特性
如STM8S208RB 中PE 1 2 作为输出不了高电平(内部没有P——buffer 和protection 连接失效)
要输出高电平,要外接上拉电阻
7、(网上找的)今天搞了一天的STM8,也是初次使用IAR,所以很多问题的处理都没有什么头绪。
我将ADC的转换结果赋给一个unsigned int 变量,
AD_Value=((((unsigned int)ADC_DRH)<<2)+ADC_DRL);
这样写会有警告:Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
但是我分为两句写,就编译通过了,语句的功能是一样的
AD_Value=(((unsigned int)ADC_DRH)<<2);
AD_Value+=ADC_DRL;
7.1
i=(GPIO_ReadInputData(GPIO_DOOR_CALL))&(0X30 );
if( i!= 0x30 )
{
可以执行到这里
}
if( (GPIO_ReadInputData(GPIO_DOOR_CALL))&(0X30 )!= 0x30 )
{
到不了这里
}
8/
对某个PORT口可进行 一次多个子端口进行操作
副作用:移植时若端口有变化则须重写,
u8 GPIO_Pin;
u8 GPIO_Mode;
/* (Leds) as output push-pull */
GPIO_Pin = LED1_PIN|LED2_PIN|LED3_PIN| LED4_PIN;
GPIO_Mode = GPIO_MODE_OUT_PP_HIGH_FAST;
GPIO_Init(LEDS_PORT, GPIO_Pin, GPIO_Mode);
GPIO_WriteLow(LEDS_PORT, LED1_PIN|LED2_PIN|LED3_PIN|LED4_PIN);
9 #if 注意
{#if 写在这里编译失败
#if 写在这里就可以
}