野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15992|回复: 3

串口问题

[复制链接]
发表于 2015-7-29 13:34:07 | 显示全部楼层 |阅读模式
STM32串口怎么接收处理浮点数  我需要将浮点数存入内部FLASH中

回复

使用道具 举报

发表于 2015-7-29 14:15:13 | 显示全部楼层
串口一般接收到的是字符,要自己处理,
思路应该是这样的:用数组存放接收到数据(一般要有个结束符,比如回车,可看出例程)
然后对数组每一位数据单独做处理,首先找到小数点,然后对其他数字应该是要减去一个‘0’得到数据大小
最好就是整合得到浮点数数据了
至于你要保存在内部Flash的话有相关固件库函数函数可以的,你可以自己查查
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-29 15:06:48 | 显示全部楼层
亽亼 发表于 2015-7-29 14:15
串口一般接收到的是字符,要自己处理,
思路应该是这样的:用数组存放接收到数据(一般要有个结束符,比如 ...

void USART1_IRQHandler(void)
{
uint8_t ch[200];
int i;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{  
   ch = USART_ReceiveData(USART1);
    i++;
}

FLASH_WriteByte (WRIT_START_ADDR ,ch,20) ;//写入FLASH
}

void FLASH_WriteByte (uint32_t addr ,uint8_t *p,u16 Byte_Num)
{
  uint32_t HalfWord;
   Byte_Num = Byte_Num/2;
  FLASH_Unlock();
  NbrOfPage=(WRIT_END_ADDR-WRIT_START_ADDR)/FLASH_PAGE_SIZE;
  FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
  for( EraseCounter=0;( EraseCounter<NbrOfPage)&&(FLASHStatus==FLASH_COMPLETE);EraseCounter++)
  {
    FLASHStatus=FLASH_ErasePage(WRIT_START_ADDR+(FLASH_PAGE_SIZE*EraseCounter));
  }
  Address = WRIT_START_ADDR;
  if (FLASHStatus == FLASH_COMPLETE)
  {
   while(Byte_Num --)
          {
      HalfWord=*(p++);
      HalfWord|=*(p++)<<8;
      FLASH_ProgramHalfWord(addr, HalfWord);
      addr += 2;
          }
  }
  FLASH_Lock();//??
}

这样写是不是可以把接收的字符串按一个字节一个字节的存入Flash中?

回复 支持 反对

使用道具 举报

发表于 2015-7-29 17:08:52 | 显示全部楼层
内部Flash读写程序没研究,你可以写进去以后再读出来与你串口调试助手发送的数据比较
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-15 09:09 , Processed in 0.031432 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表