F103程序移植到F407的经验小结

描述

1.部分外设及GPIO口对应的时钟改变

因此各GPIO的时钟使能函数和时钟名称均发生改变。

时钟

 

时钟

2.GPIO口的模式发生改变
 

F1的GPIO口只有8种模式;而F4在输出时亦可设置上拉和下拉,因此F4可以有12种模式。并且F4的GPIO口的输入/输出/复用/模拟、推挽/开漏、上拉/下拉 都需要单独设置。除此之外,因为F4用的是AHB时钟,其最大输出速率可达到100MHz以上。

时钟

时钟

时钟

时钟

3.GPIO口对应的寄存器的名称发生改变

直接编译的话就会出现这样的错误errorstruct""has no field "CRL",CRL是F1的端口配置低位寄存器,而因为F4中对应的寄存器已经不叫这个名字了(叫MODER),因此会报错。

  •  
  •  
  •  
  •  
  •  
  •  
  •  

//举个栗子//F1#define AMG_SDA_IN() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}//PB7输入模式#define AMG_SDA_OUT() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}//PB7输入模式//F4#define AMG_SDA_IN() {GPIOB->MODER&=~(3<<(7*2));GPIOB->MODER|=0<<7*2;} //PB7输入模式#define AMG_SDA_OUT() {GPIOB->MODER&=~(3<<(7*2));GPIOB->MODER|=1<<7*2;}//PB7输入模式

4.F4配置有浮点数得硬件运算单元

F1是没有浮点数得硬件运算单元的,其浮点数运算是采用软件模拟,因此运算速度会很慢。(1)警告:warning:#1035-D:single-precision operand implicitly converted to double-precision解决方法:1)如果是浮点数值进行运算的话,则在浮点数值后加上f;2)若是变量运算,则将其计算强制转换

  •  
  •  
  •  

float a,b,c;c=0.1f*8.9f;//浮点数值后加fa=(float)(a*b);//将其运算结果转换

(2)如何开启F4的浮点数硬件计算单元

1)打开文件system_stm32f4xx.c——>函数void SystemInit(void)中加入如下代码:

  •  
  •  
  •  

#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));    #endif

2)在编译器中,Options for Target’XXX’—>C/C+±—>Define中加入以下语句:

  •  

__FPU_PRESENT=1,__FPU_USED =1

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分