STM32 L431浮点数性能测试

这篇博客详细测试了STM32 L431在80MHz主频下,浮点数运算的性能。通过对比开启和关闭FPU执行sin函数、平方根及加法运算,结果显示FPU能显著提高运算速度,最高可达33.5倍。文章指出,FPU在中规模浮点运算中尤其有用,同时也提到了其在FFT和滤波等应用中的便利性,并建议根据应用场景选择是否使用带FPU的M4内核。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行的主频是80MHz

  1. 求sin值
  ticks = HAL_GetTick();
  //进行浮点数计算
  for(uint16_t i=0;i<10000;i++) //进行一万次sin函数计算
  {
   
	  f = sin((float)i);    
  }
  ticks = HAL_GetTick(
### STM32通过串口发送浮点数的方法 在STM32中,可以通过串口发送浮点数。由于浮点数通常占用4个字节的空间,在实际传输过程中需要将其拆分为单个字节逐一发送,并在接收端重新组合成浮点数值。 以下是实现这一功能的具体方法: #### 方法描述 1. **分解浮点数为字节数组** 将浮点数按内存布局逐字节读取并存储到一个`uint8_t`类型的数组中。 2. **逐字节发送** 利用UART接口的发送函数(如`HAL_UART_Transmit()`),将上述字节数组中的每个字节依次发送出去。 3. **接收端重组** 接收方接收到这4个字节后,按照相同的顺序重新组装回原始的浮点数值。 --- #### 示例代码 以下是一个完整的示例代码,展示如何在STM32中通过串口发送和接收浮点数。 ##### 发送端代码 ```c #include "stm32f1xx_hal.h" void SendFloatOverUART(UART_HandleTypeDef *huart, float value) { uint8_t buffer[4]; // 创建一个长度为4的缓冲区用于存储浮点数的字节表示 // 将浮点数转换为字节数组 memcpy(buffer, (uint8_t*)&value, sizeof(float)); // 调用 HAL 库函数发送数据 HAL_UART_Transmit(huart, buffer, 4, HAL_MAX_DELAY); } ``` 此部分实现了将浮点数分解为字节数组并通过UART发送的功能[^1]。 ##### 接收端代码 ```c #include "stm32f1xx_hal.h" float ReceiveFloatFromUART(UART_HandleTypeDef *huart) { uint8_t buffer[4]; // 缓冲区用于暂存接收到的字节流 // 接收4个字节的数据 HAL_UART_Receive(huart, buffer, 4, HAL_MAX_DELAY); // 将接收到的字节流转回浮点数 float receivedValue; memcpy((uint8_t*)&receivedValue, buffer, sizeof(float)); return receivedValue; } ``` 该部分展示了如何从UART接收4个字节并将它们还原为浮点数值。 --- #### 配置优化建议 为了提高通信效率,可以采取以下措施: - 批量处理数据以减少函数调用开销[^3]。 - 提升UART波特率来加快数据传输速度。 例如,如果需要连续发送多个浮点数,则可先将这些浮点数打包至更大的缓冲区内再统一发送。 --- #### 注意事项 - 确保发送与接收双方均采用相同大小的缓存以及一致的数据排列方式。 - 如果涉及不同平台间通讯,请注意可能存在的字节序差异问题(大端模式 vs 小端模式)。大多数ARM Cortex-M系列MCU默认使用小端模式。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值