STC单片机的c代码可以移植到stm32上吗,要不要做什么修改? 51编程里的子程序头文件可以直接移植到stm32上吗

\u628astc\u5355\u7247\u673a\u7684c\u79fb\u690d\u5230stm32\u4e0a\u65f6

\u7b2c\u4e00\u3001\u7aef\u53e3\u914d\u7f6e\u662f\u5426\u5408\u7406\uff0c\u5305\u62ec\u4e0a\u62c9\uff0c\u4e0b\u62c9\uff0c\u8f93\u5165\u3002\u8f93\u51fa\u3002\u9a71\u52a8\u80fd\u529b\u7b49\u7b49
\u7b2c\u4e8c\u3001\u5ef6\u65f6\u662f\u5426\u5408\u7406\uff0c\u56e0\u4e3a\u4e3b\u9891\u4e0d\u540c\u4e86\u3002

51\u7f16\u7a0b\u91cc\u7684\u5b50\u7a0b\u5e8f\u5934\u6587\u4ef6\u4e0d\u80fd\u76f4\u63a5\u79fb\u690d\u5230stm32\u4e0a\u3002\u539f\u56e0\u5982\u4e0b\uff1a
1\u3001\u5355\u7247\u673a\u7684\u7f16\u7a0b\uff0c\u4e0e\u901a\u7528C\u8bed\u8a00\u4e0d\u5b8c\u5168\u4e00\u6837\uff0c\u786c\u4ef6\u7684\u4f9d\u8d56\u6027\u5f88\u5f3a\uff0c\u4efb\u4f55\u5b50\u7a0b\u5e8f\u90fd\u53ef\u80fd\u4e0e\u4f7f\u7528\u73af\u5883\u606f\u606f\u76f8\u5173\u3002
2\u3001\u5934\u6587\u4ef6\u9664\u4e86\u5b9a\u4e49\u53d8\u91cf\uff0c\u51fd\u6570\u7533\u660e\u4ee5\u5916\uff0c\u4e5f\u6709\u5bf9\u786c\u4ef6\u7684\u5b9a\u4e49\uff0c\u6bd4\u5982IO\u53e3\u5b9a\u4e49\uff0c\u5bc4\u5b58\u5668\u5b9a\u4e49\u7b49\u7b49\uff0c\u8fd9\u90fd\u9650\u5236\u4e86\u5176\u4f7f\u7528\u5e73\u53f0\u7684\u7075\u6d3b\u6027\uff0c\u589e\u52a0\u4e86\u79fb\u690d\u7684\u96be\u5ea6\u3002
3\u3001\u81f3\u4e8e\u4e0e\u786c\u4ef6\u65e0\u5173\u7684\u4e00\u4e9b\u51fd\u6570\u7ec4\u5408\u6210\u7684\u5934\u6587\u4ef6\uff0c\u4e5f\u4e0d\u80fd\u76f4\u63a5\u79fb\u690d\uff0c\u6bd4\u5982\u5ef6\u65f6\u3001\u663e\u793a\u3001\u901a\u8baf\u7b49\uff0c\u7531\u4e8e\u5404\u4e2a\u5355\u7247\u673a\u7684\u901f\u5ea6\u4e0d\u4e00\u81f4\uff0c\u5404\u4e2a\u5e73\u53f0\u4e0a\u7a0b\u5e8f\u5c31\u6709\u6240\u5dee\u5f02\uff0c\u751a\u81f3\u5dee\u522b\u5f88\u5927\u3002
\u7efc\u4e0a\u6240\u8ff0\uff0c\u4e0d\u540c\u79cd\u7c7b\u5355\u7247\u673a\u4e4b\u95f4\u7a0b\u5e8f\uff08\u5305\u542b\u5934\u6587\u4ef6\uff09\u79fb\u690d\u662f\u4e0d\u80fd\u76f4\u63a5\u7684\u3002

换芯片,改电路,底层肯定要重写的。
写程序有个好习惯还是很重要的。下面说一下移植方面的习惯,
提高移植性,最重要的手段就是隐藏硬件实现的细节,把逻辑与底层分开。
举个例子,LED闪一下亮一下,P1_0 = 0; 在51上就是一句话的事。就这一句,就有三个地方涉及硬件,(1)硬件上是P1.0接LED,(2)硬件上低电平亮,相应的是高电平灭,(3)硬件是用的51,用了51独有的位操作。
换个电路,或者换个芯片,这些都要重新改写。假设程序里面有十个地方需要亮灯,移植时就要改十个地方。把亮灯这件事定义成一个函数,或者叫方法,或者叫操作,把具体的操作细节隐藏起来,只表示出做了一件什么事情--亮灯。像这样,void LED_ON( void );在主程序里面,或者说在应用层的程序中调用LED_ON();就是亮灯,具体怎么亮灯,应用程序不管,也不能管,而是由单独的底层程序来做,也就是LED_ON这个函数的内容,是放在单独的一个文件中。用51,就写一个51下的底层,要移植,要用CM3就写一个CM3的底层,主程序可以不用改动,至少是尽量少改动。
为了提高移植性,尽量用标准的C写代码,涉及不同编译系统的实现细节,也要注意隐藏细节,前面的硬件细节,这个算是软件的细节吧。
比如sfr, sbit,interrupt这些,都是51独有的,换到不同的系统上,都需要重写。处理办法也是一样的,隐藏起来,放到单独的底层文件中。
基本上,做到这两步,程序的移植性会提高很多。
再举个小例子吧:

// app.c
#include "bsp.h" // 注意这里不要包含硬件有关的头文件,比如"reg51.h",不要包含在这里。
void main( void )
{
while(1)
{
if ( hasKey())
{
led_on();
delay(100);
led_off();
}
}

// bsp.h
typedef unsigned short uint16_t;
typedef bit bool;
void led_on( void );
void led_off( void );
void delay( uint16_t ms );
bool hasKey( void );
// bsp_for_51.c
#include "bsp.h"
#include "reg51.h"
sbit led = P1^0;
#define ON (0)
void led_on( void )
{
led = ON;
}

void led_off( void )
{
led = !ON;
}

void delay( uint16_t ms )
{
int i;
while( ms-- )
for( i=0; i<100; i++);
}
bool hasKey( void )
{
return ( P0 != 0xFF); // 测试是否有按键?
}

这个是51的系统,换成STM32,简单重写一下bsp.c,不需要改app.c,系统就可以移植过来。

除了算法,所有涉及到硬件的地方都得修改,延时、IO控制、定时器、串口、AD、EEPROM……也和重写差不多了

移植可以,要看代码质量,要修改的地方多!

不可以,不是修改那么简单的了,基本重写。

  • STC鍗曠墖鏈虹殑c浠g爜鍙互绉绘鍒stm32涓婂悧,瑕佷笉瑕佸仛浠涔堜慨鏀?
    绛旓細涓庣‖浠剁浉鍏崇殑閮ㄥ垎浠g爜鑲畾闇瑕佷慨鏀癸紝璁$畻閮ㄥ垎褰撶劧涓嶇敤淇敼浜嗐
  • STC鍗曠墖鏈虹殑c浠g爜鍙互绉绘鍒stm32涓婂悧,瑕佷笉瑕佸仛浠涔堜慨鏀?
    绛旓細鐢51锛屽氨鍐欎竴涓51涓嬬殑搴曞眰锛岃绉绘锛岃鐢–M3灏卞啓涓涓狢M3鐨勫簳灞傦紝涓荤▼搴忓彲浠ヤ笉鐢ㄦ敼鍔紝鑷冲皯鏄敖閲忓皯鏀瑰姩銆備负浜嗘彁楂樼Щ妞嶆э紝灏介噺鐢ㄦ爣鍑鐨凜鍐浠g爜锛
  • STC 89C52鍗曠墖鏈,鐢↘EIL鍐欏嚭C绋嬪簭鍚庢庝箞瀵煎叆鍒板崟鐗囨満銆
    绛旓細鐢╧eil缂栬瘧鍣ㄧ紪璇戝嚭hex鏂囦欢 鐒跺悗浣跨敤STC涓嬭浇杞欢閫氳繃涓插彛灏卞彲浠ョ洿鎺ヤ笅杞藉埌鍗曠墖鏈轰腑鐑у綍杩愯
  • STC12C5A60S2鍗曠墖鏈绋嬪簭鎬庝箞绉绘鍒STM32-STM32-F3/F4/F7涓撳尯
    绛旓細涓や釜MCU鐩稿樊寰堝ぇ锛屾眹缂栫▼搴忕殑璇濇棤娉曠Щ妞嶏紝C璇█鐨勮瘽锛屽皢纭欢鐩稿叧鍋氱浉搴旂殑淇敼鍚鍙互绉绘銆
  • stc89c52鐨浠g爜鑳戒笉鑳鎷挎潵鐩存帴鍦⊿TC12c5a60sc涓婅繍琛
    绛旓細浣犲悗闈㈢殑閭d釜鏄粈涔堝晩锛熶竴鑸潵璇达紝鍗曠墖鏈虹殑绋嬪簭涓嶈兘闅忎究绉绘锛屽洜涓哄崟鐗囨満绋嬪簭鏄牴鎹叿浣撶殑纭欢杩炴帴鐢佃矾缂栧啓鐨勶紝纭欢鐢佃矾涓嶄竴鏍风殑璇濓紝绋嬪簭灏变笉鑳界敤銆
  • 濡備綍灏嗙▼搴浠g爜鐑у綍杩STC鍗曠墖鏈 璇︾粏??
    绛旓細绠绠鍗曞崟鐨勪簲姝ュ氨鍙互浜嗭紙瀹為檯涓婂彧闇 4 姝ワ級銆 鍚姩鏈儳褰曠▼搴忓悗锛 绗竴姝ュ氨鏄夋嫨鐑у綍鍣ㄤ欢銆 鏈儳褰曡蒋浠舵敮鎸STC 鍏ㄧ郴鍒楃殑 51 鍗曠墖鏈鑺墖锛 鍥犳锛 绗竴姝ュ繀椤婚夋嫨鐩稿搴旂殑鍨嬪彿銆 鐢变簬鏈疄楠屾澘閫夌敤鐨勫崟鐗囨満鑺墖灏辨槸鏈儳褰曡蒋 浠堕娆″惎鍔ㄩ粯璁ょ殑鍨嬪彿锛屾墍浠ワ紝鏈」涓鑸兘涓嶉渶瑕侀夋嫨銆傚彟澶栵紝鈥 AP Memory...
  • STC12C5A60S2鍗曠墖鏈绋嬪簭鎬庝箞绉绘鍒STM32-STM32-F3/F4/F7涓撳尯
    绛旓細闇瑕佹洿鏀圭殑鍦版柟灏辨槸鎿嶄綔搴曞眰瀵勫瓨鍣ㄩ儴鍒嗭紝杩欎簺闇瑕佸叏閮ㄩ噸鍐欙紝杩樻湁涓柇鍑芥暟浠ュ強浣犳槸鍚︿細鐢ㄥ埌AD杞崲銆両IC銆佷覆鍙g瓑澶栬锛岀敤鍒扮殑璇濅篃鍚屾牱闇瑕佹洿鏀癸紝鍞竴涓嶇敤鏀圭殑灏辨槸閫昏緫閮ㄥ垎鐨浠g爜锛
  • 鎶c鏂囦欢绮樿创鍒STC鍗曠墖鏈鐑у綍鍣"绋嬪簭鏂囦欢"绐楀彛鍙互鍚?
    绛旓細涓嶅彲浠ワ紝c闇瑕侀渶瑕佺紪璇戝悗鎵嶈兘浣跨敤
  • 51鍗曠墖鏈虹殑绋嬪簭绉绘鍒avr鍗曠墖鏈哄簲璇ユ庢牱绉绘 娉ㄦ剰浠涔堥棶棰 ?_鐧惧害鐭...
    绛旓細澶存枃浠朵笉闇瑕佽嚜宸卞啓锛屾瘡绉嶇紪璇戝櫒鏈夎嚜甯︾殑澶存枃浠讹紝鍙#include灏卞彲浠ヤ簡锛屼笉杩囪include瀵广備簩銆51鍗曠墖鏈(鍖呮嫭STC鐨)绋嬪簭绉绘鍒AVR骞冲彴涓婇渶瑕佹敞鎰忎簨椤 1) 澶存枃浠, 瀵勫瓨鍣ㄥ悕,瀵勫瓨鍣ㄨ缃浠g爜閮芥槸瑕佺浉搴斾慨鏀圭殑銆2) IO绔彛鐨勪綅鎿嶄綔瑕佸仛鐩稿簲鐨勮皟鏁淬3) 涓柇鏈嶅姟鍑芥暟鐨勬牸寮忎篃鏈変笉鍚,闇鍋氱浉搴旇皟鏁 銆4) 51...
  • 璋鑳甯垜鎶奀鏂囦欢杞琀EX,鍗曠墖鏈鏄STC12CA60S2,鎴戠敤KEIL鎵句笉鍒拌繖鑺墖銆傝兘...
    绛旓細寰堢畝鍗曪紝鍒皐ww.stcmcu.com缃戠珯涓婁笅杞経V2.CAB鎴栬匲V3.CDB鏂囦欢锛堢湅浣犵殑Keil鐨勭増鏈簡锛屼笅杞藉搴旂殑.CDB鏂囦欢锛夛紝鏀捐繘浣犵殑Keil瀹夎鐩綍鐨刄V3锛堟垨鑰匲V2锛岃鐪嬩綘鐨凨eil鐨勭増鏈簡锛変笅锛屾敞鎰忓厛灏嗚蒋浠舵湰韬殑UV2.CDB锛堟垨UV3.CDB锛夋枃浠跺浠斤紝鍚﹀垯鍘熸潵鐨勫簱鏂囦欢灏嗕涪澶便傝繕鏈変釜灏辨槸澶存枃浠剁殑闂浜嗭紝缃戜笂涓嬭浇涓涓ご...
  • 扩展阅读:电子元器件代码对照表 ... 宏晶stc单片机官网 ... c语言代码生成器 ... 编程颜色代码大全 ... 单片机代码编程软件 ... 初学编程100个代码大全 ... stc官网最新版下载 ... stc89c51和c52 ... 法兰克g代码m代码大全图表 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网