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
全部0条评论
快来发表一下你的评论吧 !