OpenEdv-开源电子网

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

软件仿真和硬件仿真不一样。。函数set()这样写对不对??

[复制链接]

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-6-14
在线时间
19 小时
发表于 2016-7-6 17:26:05 | 显示全部楼层 |阅读模式
1金钱
void  set(uint64_t data64)
{
        u16 data16_1,data16_2,data16_3,data16_4;

        u16 temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8,temp9,temp10,
            temp11,temp12,temp13,temp14,temp15,temp16,temp17,temp18;
       
        data16_1 = (u16)(data64 >> 48) & 0xffff;
        data16_2 = (u16)(data64 >> 32) & 0xffff;
        data16_3 = (u16)(data64 >> 16) & 0xffff;
        data16_4 = (u16) data64 & 0xffff;
       
        //D′GPIOA
        temp1 = data16_4 & 0x1fff;
        GPIO_Write(GPIOA, temp1);
       
  //D′GPIOB
        temp2 = data16_4 & 0x6000;
        temp3 = data16_4 & 0x8000;
        temp5 = data16_3 & 0x000F;
        temp6 = data16_3 & 0x00F0;
        temp4 |= temp2 >>13;
        temp4 |= temp3 >>10;
        temp4 |= temp5 <<6;
        temp4 |= temp6 <<8;
        GPIO_Write(GPIOB, temp4);
       
        //D′GPIOC
        temp7 = data16_3 & 0xFF00;
        temp9 = data16_2 & 0x0001;
        temp8 |= temp7 >>4;
        temp8 |= temp9 <<12;
        GPIO_Write(GPIOC, temp8);
       
  //D′GPIOD
        temp10 = data16_2 & 0xFFFE;
        temp12 = data16_1 & 0x0001;
        temp11 |= temp10 >>1;
        temp11 |= temp12 <<15;
        GPIO_Write(GPIOD, temp11);
       
        //D′GPIOE
        temp13 = data16_1 & 0x00FE;
        temp14 |= temp13 >>1;
        GPIO_Write(GPIOE, temp14);
       
        //D′GPIOF
        temp15 = data16_1 & 0x0F00;
        temp16 |= temp15 <<3;
        GPIO_Write(GPIOF, temp16);
       
        //D′GPIOG
        temp17 = data16_1 & 0xF000;
        temp18 |= temp17 >>10;
        GPIO_Write(GPIOG, temp18);
}


int main ()
{
        gpio_Init();
        gpio_reset();
        set(18014398509744128);
       
}
换了se()函数里面好几个值,PC5,PC6,PC8都一直为高电平,set函数这样写对不对?求指点

最佳答案

查看完整内容[请看2#楼]

你硬件仿真看看寄存器,看看PC5,PC6,PC8的设置和ODR寄存器,看看他们的值对不对先
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-6 17:26:06 | 显示全部楼层
你硬件仿真看看寄存器,看看PC5,PC6,PC8的设置和ODR寄存器,看看他们的值对不对先
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-6-14
在线时间
19 小时
 楼主| 发表于 2016-7-6 17:43:14 | 显示全部楼层
我个人觉得,我要写入的数值太大了,然后它就溢出了,但我不知道是不是这样2^54+2^18=18014398509744128,是不是这个数太大了,程序下载到stm32103ZET6中就存储不了,就出错了,我软件仿真的时候是对的,下载到实物中就出错了,每次出错的地方都一样,有没有高人指点一下,谢谢
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-6-14
在线时间
19 小时
 楼主| 发表于 2016-7-6 21:03:08 | 显示全部楼层
憨厚诚实大叔 发表于 2016-7-6 17:51
你硬件仿真看看寄存器,看看PC5,PC6,PC8的设置和ODR寄存器,看看他们的值对不对先

1.png 2.png
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-6-14
在线时间
19 小时
 楼主| 发表于 2016-7-6 21:06:38 | 显示全部楼层
第一个图是JTAG调试时候产生的,错误的。第二个图就是纯软件调试的,程序和上面一模一样,stm32可以那样子写64位数么,我想知道set()函数那样子拆分对不对?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-14 19:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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