OpenEdv-开源电子网

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

51的程序移植到stm32上,怎么弄啊,萌新求助大神

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-4-26
在线时间
5 小时
发表于 2019-4-27 10:19:28 | 显示全部楼层 |阅读模式
11金钱
#include <reg52.h>
#include <intrins.h>
sbit CONF_DONE=P1^0;//配置完成状态引脚
sbit DCLK=P1^1;//配置时钟引脚
sbit NCONFIG=P1^2;//配置控制引脚
sbit NSTATUS=P1^3;//配置状态引脚
sbit DATA0=P1^4;//配置数据引脚
unsigned char code fpga[]={0xfe
/*FPGA的.ttf文件内容*/
};
void main()
{
       unsigned char dat,i;
       unsigned int j;
       NCONFIG=1;
       NSTATUS=1;
       DCLK=0;
       CONF_DONE=1;
  do{
                            for(j=0;j<500;j++)
                          {
                                _nop_();
                          }
              NCONFIG=0;
              for(i=0;i<15;i++)
              {
                     _nop_();
              }
              NCONFIG=1;
              while(NSTATUS==0);
              _nop_();_nop_();_nop_();_nop_();_nop_();
              for(j=0;j<sizeof(fpga);j++)                        
              {
                     dat=fpga[j];
                     for(i=0;i<8;i++)
                     {   
                            DCLK=0;
                            DATA0=(bit)(dat&0x01);
                            DCLK=1;
                            dat=dat>>1;
                            _nop_();
                            DCLK=0;
                     }
              }
              _nop_();_nop_();_nop_();_nop_();_nop_();
     }while(CONF_DONE==0);//配置完成
   while(1);
}
就是这个程序,改成stm32的程序,求各位大神帮忙

最佳答案

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

你移植到stm32上的话,得先确定用哪些管脚,51上你用了P10 11 12 13 14这几个引脚,在移植到32上你使用哪些脚位,然后对应起来,接着配置对应的脚位的输入输出,最后用库里的控制函数操作就行了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2019-1-5
在线时间
259 小时
发表于 2019-4-27 10:19:29 | 显示全部楼层
你移植到stm32上的话,得先确定用哪些管脚,51上你用了P10 11 12 13 14这几个引脚,在移植到32上你使用哪些脚位,然后对应起来,接着配置对应的脚位的输入输出,最后用库里的控制函数操作就行了。
回复

使用道具 举报

22

主题

271

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2019-3-21
在线时间
107 小时
发表于 2019-4-27 10:22:52 | 显示全部楼层
没用过51,帮顶
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-4-26
在线时间
5 小时
 楼主| 发表于 2019-4-27 10:23:30 | 显示全部楼层
感谢,感谢
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-4-27 10:52:02 | 显示全部楼层
帮顶~~
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-4-26
在线时间
5 小时
 楼主| 发表于 2019-4-27 10:56:06 | 显示全部楼层
感谢大神
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-4-26
在线时间
5 小时
 楼主| 发表于 2019-4-27 13:49:35 | 显示全部楼层
好的,我试一下
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-4-26
在线时间
5 小时
 楼主| 发表于 2019-4-27 13:55:12 | 显示全部楼层
现在好像只剩下这个代码(DATA0=(bit)(dat&0x01);)里的bit没定义的问题了,我应该怎么定义一下啊,或者那个.h文件里有这个的定义啊
回复

使用道具 举报

2

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2019-1-5
在线时间
259 小时
发表于 2019-4-27 14:17:37 | 显示全部楼层
WYNZL 发表于 2019-4-27 13:55
现在好像只剩下这个代码(DATA0=(bit)(dat&0x01);)里的bit没定义的问题了,我应该怎么定义一下啊,或者那 ...

这里的bit是位的意思,
在51中,像你程序中的DATA0是指P14脚位,应该是输出脚,当你DATA0=1;的时候,意思是这个脚位输出高电平,而在stm32中,你开了时钟,设置了脚位的输入输出,然后要输出高电平时,你可以直接用标准库中的GPIO_SetBits(...)函数,这是等价的;
在stm32中,你要先判断(dat&0x01)是等于1还是0,在决定用GPIO_SetBits(...)还是GPIO_ResetBits(...)函数;
个人建议你找个简单的stm32引脚控制例程,看你的程序应该只是简单的引脚控制功能
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-4-26
在线时间
5 小时
 楼主| 发表于 2019-4-27 14:40:47 | 显示全部楼层
好的,多谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 06:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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