想把stm32f1的代码移植到f4上应该怎么办

想把stm32f1的代码移植到f4上应该怎么办,第1张

换芯片,改电路,底层肯定要重写的。

写程序有个好习惯还是很重要的。下面说一下移植方面的习惯,

提高移植性,最重要的手段就是隐藏硬件实现的细节,把逻辑与底层分开。

举个例子,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

#defineON (0)

void led_on( void )

{

led = ON

}

void led_off( void )

{

led = !ON

}

void delay( uint16_t ms )

{

int i

while( ms-- )

for( i=0i<100i++)

}

bool hasKey( void )

{

return ( P0 != 0xFF)// 测试是否有按键?

}

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

之前用 STM32F1XX 做的 基本上都用 STM32F0 和 STM32F3 替换了。原因就是 STM32F0 和哗胡 STM32F3 系列的外部资源要多很多,而且修改了很多在 F1XX F2XX F4XX 上面不好的地方。乱答拦

STM32F0 卖的更便宜 但也不能完全代替 51

但老实说,在多数51的应用场合,STM32F0 或举悉者其它CortexM0 MCU都可以替代 51

这个是不能够使用的举仔,原因如下:

1、F1内部SRAM最大64K字节, F4内部SRAM有192K字节(112K+64K+16K)

2、F1的GPIO的内部上下拉电阻配档答银置仅仅针对输入模式有用,输出时无效。而F4的GPIO在设置为输出模式时,上下拉电阻的配置依然有效。即F4可以配置为开漏输出,内部上拉电阻使能,而F1不行

3、 F1最多可提供5个UART串口,F4最多可以提供6个UART串口

4、F1可提供2个I2C接口,F4可以提供3个I2C接口

5、F1和F4都具有3个12位的独立ADC,F1可提供21个输入通道,F4可以提供24个输入通道

总的来说,F4相对于F1功能强大了很多,库函数基本行宴不能通用了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12358745.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存