OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4550|回复: 1

103 GPIOC口输出低8位数据的疑惑,请教原子

[复制链接]

8

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2011-4-3
在线时间
4 小时
发表于 2013-4-10 22:31:39 | 显示全部楼层 |阅读模式
在用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位错位了)麻烦原子了。







正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2011-4-3
在线时间
4 小时
 楼主| 发表于 2013-4-10 22:33:06 | 显示全部楼层
我仔细看了应该不是硬件的问题,疑惑.......
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-21 16:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表