初级会员

- 积分
- 86
- 金钱
- 86
- 注册时间
- 2011-4-3
- 在线时间
- 4 小时
|
在用103驱动并口8位12864液晶(用GPIOC的低8位与12864的D0-D7相连),遇到诡异的问题:
由于GPIO->ODR输出的应是16bit,所以做如下处理:
void DATAOUT(u16 DATA)
{
volatile u16 TempBuff;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; //控制端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
TempBuff=GPIO_ReadInputData(GPIOC);
TempBuff&=0xff00;//取低8位
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; //控制端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
TempBuff=(u16)(TempBuff|((u16)DATA));//高8位不变+待写入的低8位数据
GPIOC->ODR=TempBuff;
}
结果比如我调用DATAOUT(0x0016),然后用万用表量GPIOC的低8位,发现GIIOC低8位数据依次为
GPIOC.0 GPIOC.1 GPIOC.2 GPIOC.3 GPIOC.4 GPIOC.5 GPIOC.6 GPIO.C7
0 0 0 1 0 1 1 0
不应该是下面这样吗?
0 1 1 0 1 0 0 0
请原子验证一下,我软件调试时,GPIOC->ODR的低8位确实是0x16,怎么到口上就不对了?(好像高4位与低4位错位了)麻烦原子了。
|
|