STM32 不同长度变量之间的赋值

STM32 不同长度变量之间的赋值,第1张

在变量声明前加volatile修饰即可,这样就能保证赋值语句不会被编译器优化
使用stm32f3xx,需要存储一些掉电不丢失的校准信息,查阅手册得知:
1、stm32写flash的长度是固定的16bit;
2、擦除时必须整块(2Kbytes)擦除,给出某flash块内的地址,执行擦除命令就可以了;
3、参考手册给出了最小擦写次数为10K。
以上三点对于实际使用时的影响,首先,写数据必须以16bit为单位,很多32bit长度的值就不能直接使用类似A=B的赋值语句的方法去 *** 作了,可以统一转化为指向16bit无符号整形值的指针来处理。举例,有一个32bit长度的float变量v_float,要存入地址为(FLASH_ADDRESS)的flash中:
#defineFLASH_ADDRESS(0x0803F800)
if(FLASH->CR&=FLASH_CR_LOCK)//解锁flash
{FLASH->KEYR=(FLASH_KEYR_FKEYR&FLASH_KEY1);FLASH->KEYR=(FLASH_KEYR_FKEYR&FLASH_KEY2);while(FLASH->CR&FLASH_CR_LOCK);}
while(FLASH->SR&=FLASH_SR_BSY);FLASH->CR|=FLASH_CR_PG;
//功能选择,写flash{((unsignedshort)(FLASH_ADDRESS)+0)=((unsignedshort)(&v_float)+0);
((unsignedshort)(FLASH_ADDRESS)+1)=((unsignedshort)(&v_float)+1);
flash中的浮点数到ram中的变量a_float

float oint unit浮点运算单元
STM32系列M3不支持,M4支持单精度,M7支持双精度
如图独立于CPU内核,可单独开启关闭
设置方法

STM32F4采用Cortex-M4内核,相比Cortex-M3系列除了内置硬件FPU单元,在数字信号处理方面还增加了DSP指令集,支持诸如单周期乘加指令(MAC),优化的单指令多数据指令(SIMD),饱和算数等多种数字信号处理指令集。相比Cortex-M3,Cortex-M4在数字信号处理能力方面得到了大大的提升。Cortex-M4执行所有的DSP指令集都可以在单周期内完成,而Cortex-M3需要多个指令和多个周期才能完成同样的功能。
个人理解就是处理数据更快

Drivers-CMSIS-DSP-Lib中,Examples文件夹下是一些测试实例,Source中就是函数库了

参考文章:
>

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

原文地址: http://outofmemory.cn/yw/13334895.html

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

发表评论

登录后才能评论

评论列表(0条)

保存