微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 菜鸟求助:如何将一个uint32_t保留低8位变成一个uint8_t?

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

时间:10-02 整理:3721RD 点击:
比如 :
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都是推挽输出,初始化都没有问题,已经试验过了
拜托了

应该这样写吧
低8位:  data2 = (uint8_t)(data1 & 0xFFu);
次低8位:data2 = (uint8_t)((data1 >> 8u)  & 0xFFu);
在你原来基础上是加个显示转换应该也是可以的吧data2 = (uint8_t)data1;
data2 = (uint8_t)(data1 >> 8u);
总之,一般是不应该隐式转换的,而应该是显式转换。然后建议你去验证下你原来的做法,看是不是被截取了高8位的缘故?真这样的话有可能是依赖于编译器的大小端模式。

楼上说的很对 一般进行显式转换就行了

只要加个仿真调试下,看下变量值就行了
建议  还是用显示转换的比较好

2楼回答的正确,一般都是这样处理的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top