OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2783|回复: 10

上位机与stm32的通信

[复制链接]

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2018-2-13
在线时间
25 小时
发表于 2019-5-8 10:43:59 | 显示全部楼层 |阅读模式
5金钱
请问各位大佬们,我如何能将一个.rbf文件(储存在电脑中的)发送给stm32?例程上都是发送固定的数据,就是我写什么发什么,那么这种文件式的应该如何发送?并且我想将收到的文件数据直接存到flash中,应该如何操作?急求,多谢

最佳答案

查看完整内容[请看2#楼]

这是我给别人写的一段串口代码你参考下 u8 USART1_In,USART1_Out; u8 USART1_RX_BUF[100]; void uart_init() { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10; GPIO_InitStructure. ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2016-5-27
在线时间
91 小时
发表于 2019-5-8 10:44:00 | 显示全部楼层
城南花已开 发表于 2019-5-8 21:22
大佬您好,是不是串口发送的数据必须是已知的,格式必须也是知道的,我看他那里必须得是有回车换行的,什 ...

这是我给别人写的一段串口代码你参考下
u8  USART1_In,USART1_Out;
u8  USART1_RX_BUF[100];

void uart_init()
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        
  GPIO_Init(GPIOA, &GPIO_InitStructure);
     
  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        
  NVIC_Init(&NVIC_InitStructure);        
  
  USART_Init(USART1, &USART_InitStructure);
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_Cmd(USART1, ENABLE);      
}
void USART1_IRQHandler(void)
{
   if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
   {
     USART_ClearITPendingBit(USART1,USART_IT_RXNE);
     USART1_RX_BUF[USART1_In++] = USART_ReceiveData(USART1);
     if(USART1_In>=100) USART1_In=0;                       
   }
}
u8 GetData(void)
{
        u8 data;        
          data=USART1_RX_BUF[USART1_Out++];
                if(USART1_Out>=100) USART1_Out=0;        
        return data;
}

int main(void)
{
u8 value=0;
  ......
  while(1)
  {
     if(USART1_Out!=USART1_In)
      {
        value=GetData();
         //你的处理代码 value就是串口接收的数据
       }
   }
......
}
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2018-2-13
在线时间
25 小时
 楼主| 发表于 2019-5-8 10:45:05 | 显示全部楼层
大佬大佬看过来
回复

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2019-5-8 11:21:16 | 显示全部楼层
看来的自己写PC端软件来发了。要不试试串口助手的发送文件功能。
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2016-5-27
在线时间
91 小时
发表于 2019-5-8 12:36:49 | 显示全部楼层
用串口助手,16进制发送-打开文件-发送文件,就行了。STM的接收保存都有例子,自己写下。
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2018-2-13
在线时间
25 小时
 楼主| 发表于 2019-5-8 16:07:16 | 显示全部楼层
brucewoo 发表于 2019-5-8 11:21
看来的自己写PC端软件来发了。要不试试串口助手的发送文件功能。

串口就可以了么?不用什么can总线啥的 ?
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2018-2-13
在线时间
25 小时
 楼主| 发表于 2019-5-8 16:08:46 | 显示全部楼层
www88988 发表于 2019-5-8 12:36
用串口助手,16进制发送-打开文件-发送文件,就行了。STM的接收保存都有例子,自己写下。

通过串口发送过去之后,如何存到stm32的flash中?就是这时发送过去的数据是放到哪里的?
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2016-5-27
在线时间
91 小时
发表于 2019-5-8 17:14:26 | 显示全部楼层
城南花已开 发表于 2019-5-8 16:08
通过串口发送过去之后,如何存到stm32的flash中?就是这时发送过去的数据是放到哪里的?

串口接收的数据是放在你定义的缓冲中的,也就是STM的片内RAM中,需要从RAM写入到FLASH。
正点原子的《STM32F1开发指南-库函数版本_V3.1 》第39章 FLASH模拟EEPROM 就有现成的
程序例子,花点时间耐心的看看。
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2018-2-13
在线时间
25 小时
 楼主| 发表于 2019-5-8 21:22:41 | 显示全部楼层
www88988 发表于 2019-5-8 17:14
串口接收的数据是放在你定义的缓冲中的,也就是STM的片内RAM中,需要从RAM写入到FLASH。
正点原子的《ST ...

大佬您好,是不是串口发送的数据必须是已知的,格式必须也是知道的,我看他那里必须得是有回车换行的,什么0d0a那种,我的那个.rbf文件写的啥不清楚的话是不是就用不了串口了 ?
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2016-5-27
在线时间
91 小时
发表于 2019-5-8 23:05:54 | 显示全部楼层
城南花已开 发表于 2019-5-8 21:22
大佬您好,是不是串口发送的数据必须是已知的,格式必须也是知道的,我看他那里必须得是有回车换行的,什 ...

串口通信,要有通信协议,不然一堆二进制数也不知道是什么东东是不?不过你这只是保存和恢复数据的可以不要通信协议,因为你已经知道这些数据是干什么用的,不需要解析数据。但我建议还是加个帧头和校验。
回复

使用道具 举报

1

主题

100

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2019-8-29
在线时间
31 小时
发表于 2019-9-3 14:20:40 | 显示全部楼层
我也很需要
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 23:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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