STM32/STM8技术william hill官网
直播中

li

12年用户 79经验值
擅长:533607
私信 关注
[问答]

菜鸟求助:如何将一个uint32_t保留低8位变成一个uint8_t?

比如 :
uint32_t data1;,
uint8_t  data2;
data2 = data1;
是不是就将最低的8位传送给了 data2??
如果要传送次低的8位:
data2 = data1>>8;
就可以了?????
求助


extern void GPIO_OUT(uint32_t Output)
{
        uint16_t temp1,temp2;
        temp1=(uint16_t)Output;
        temp2=(uint16_t)Output;
        GPIOA->ODR = temp1;//保留低8位
        GPIOB->ODR = temp2;//保留高8位
        GPIOC->ODR = (uint16_t)(Output>>16);//保留高16位
}
运行一下只有PC的16个端口能正常输出
所有的GPIO都是推挽输出,初始化都没有问题,已经试验过了
拜托了

回帖(5)

黄伟志

2014-4-8 15:08:01
本帖最后由 bj2008wyou 于 2014-4-8 15:33 编辑

应该这样写吧
低8位:  data2 = (uint8_t)(data1 & 0xFFu);
次低8位:data2 = (uint8_t)((data1 >> 8u)  & 0xFFu);

在你原来基础上是加个显示转换应该也是可以的吧data2 = (uint8_t)data1;
data2 = (uint8_t)(data1 >> 8u);

总之,一般是不应该隐式转换的,而应该是显式转换。然后建议你去验证下你原来的做法,看是不是被截取了高8位的缘故?真这样的话有可能是依赖于编译器的大小端模式。

举报

z00

2014-4-9 21:09:03
楼上说的很对 一般进行显式转换就行了
举报

ballack_linux

2014-4-10 10:34:21
只要加个仿真调试下,看下变量值就行了
建议  还是用显示转换的比较好
举报

youzizhile

2014-4-13 22:23:19
2楼回答的正确,一般都是这样处理的
举报

李敏波

2014-4-14 17:07:49
举报

更多回帖

发帖
×
20
完善资料,
赚取积分