Ymodem STM32F103VET6 调试笔记

参考:https://blog.csdn.net/weixin_42418557/article/details/122321427
大部分参考了这个帖子,
但中途发现几个问题记录一下

问题1:
官方工程里的代码

HAL_StatusTypeDef Serial_PutByte( uint8_t param )
{
  /* May be timeouted... */
  if ( UartHandle.State == HAL_UART_STATE_TIMEOUT )
  {
    UartHandle.State = HAL_UART_STATE_READY;
  }
  return HAL_UART_Transmit(&UartHandle, &param, 1, TX_TIMEOUT);
}

调试中发现UartHandle.State报错,原因是新版STM32Cube生成的一个stm32f1xx_hal_uart.h中.State已经变更为.gState
修改后的代码

HAL_StatusTypeDef Serial_PutByte( uint8_t param )
{
  /* May be timeouted... */
  if ( UartHandle.gState == HAL_UART_STATE_TIMEOUT )
  {
    UartHandle.gState = HAL_UART_STATE_READY;
  }
  return HAL_UART_Transmit(&UartHandle, &param, 1, TX_TIMEOUT);
}

这样编译就不会出错

问题2
配置好APP后,Xshell发送Bin文件结束后APP无法正常运行

官方工程跳转APP代码片段

 /* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
    if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
    {
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
      JumpToApplication = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
	  __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
      JumpToApplication();

在JumpToApplication();前加入关闭中断等函数

/* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
    if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
    {
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
      JumpToApplication = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
			
			
			SysTick->CTRL = 0X00;//禁止SysTick
			SysTick->LOAD = 0;
			SysTick->VAL = 0;
			__disable_irq();
			
			
      JumpToApplication();

同理在Main_Menu();菜单里面的3也需要加入这四行代码

    case '3' :
      Serial_PutString("Start program execution......\r\n\n");
      /* execute the new program */
      JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
      /* Jump to user application */
      JumpToApplication = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
		
			SysTick->CTRL = 0X00;//禁止SysTick
			SysTick->LOAD = 0;
			SysTick->VAL = 0;
			__disable_irq();
		
      JumpToApplication();
      break;

问题3
波特率为9600 8 N 1的时候发送Bin文件一直卡住
原因:不知道,没仔细查

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: STM32F103是一款很受欢迎的ARM Cortex-M3内核的微控制器。而Ymodem则是一种常用的串行通信协议,用于在计算机与外部设备之间进行数据传输。STM32F103提供了一个示例程序,用于实现通过Ymodem协议进行数据传输。 该示例程序的主要功能是通过串口与计算机通信,并使用Ymodem协议进行文件传输。使用者可以将文件发送到STM32F103中,或者从STM32F103中接收文件并保存到计算机中。 首先,需要将STM32F103与计算机的串口进行连接。然后,通过运行示例程序,STM32F103将等待计算机发送的指令。当计算机准备好发送文件时,STM32F103将通过Ymodem协议接收文件,并将其保存到内部存储器中。 在接收文件时,示例程序还提供了一些额外的功能。例如,可以在传输过程中检测校验错误,并向计算机发送相应的错误信息。另外,还可以实现传输过程的进度显示功能,以便于用户了解传输的进展情况。 对于发送文件,示例程序通过Ymodem协议实现了数据分割和校验等功能。可以将计算机中的文件分割成数据包,并通过串口传输给STM32F103。在传输过程中,STM32F103将会对接收的每个数据包进行校验,并向计算机发送相应的确认信息。 总的来说,STM32F103 Ymodem示例程序为用户提供了一个实现文件传输的完整框架。用户可以根据自己的需求,对示例程序进行适当的修改和扩展,以实现更多的功能。 ### 回答2: stm32f103 ymodem例子程序是一个供开发者参考的示例程序,用于实现在stm32f103单片机上使用ymodem协议进行数据传输的功能。Ymodem协议是一种常用的文件传输协议,支持高速且可靠的传输。下面是关于这个例子程序的一些说明。 首先,这个例子程序使用stm32f103单片机的UART串口进行数据的传输。通过UART串口,可以连接stm32f103与外部设备,例如计算机。通过ymodem协议,可以实现文件的传输。 在这个例子程序中,stm32f103作为接收方,可以从计算机接收文件。程序首先进行串口的初始化配置,然后等待计算机发送文件。当计算机发送文件时,stm32f103会按照ymodem协议进行接收和解析文件。 在接收文件的过程中,stm32f103会校验数据包的完整性和正确性。当接收到一个完整的数据包后,会将数据存储在指定的储存器中。如果遇到错误的数据包,则会请求计算机重新发送。 在完成文件传输后,程序会给出相应的提示信息,并且可以通过串口发送反馈给计算机。如此一来,就实现了在stm32f103上通过ymodem协议进行文件传输的功能。 总的来说,这个例子程序提供了一个使用ymodem协议进行文件传输的参考实现。通过参考这个例子程序,开发者可以理解ymodem协议的基本原理,并将其应用于实际应用中。同时,也可以根据自己的需求进行相应的修改和优化。 ### 回答3: ST32F103是意法半导体(STMicroelectronics)公司推出的一款低功耗、高性能的32位微控制器。YModem是一种用于在计算机之间进行串行通信文件传输的通信协议。 对于STM32F103的YModem例子程序,可以通过以下步骤实现: 1. 首先,需要配置STM32F103的串行通信接口(UART)的相关参数,例如波特率、数据位、停止位和奇偶校验等。可以通过ST的HAL库或Cubemx来配置UART。 2. 接着,需要实现YModem协议的各种功能,包括文件发送和接收。 a. 对于文件发送,需要打开文件、计算校验和、实现数据分包和数据重传等功能。可以在HAL库或者自定义的函数中实现。 b. 对于文件接收,需要实现与发送端相对应的功能,接收数据并校验数据的完整性,并在遇到错误时进行处理,例如重传。同样,可以在HAL库或者自定义的函数中实现。 3. 最后,需要在主函数中调用以上实现的函数,使得STM32F103能够正常运行YModem传输协议。 注意,以上步骤是一个基本的框架,具体的实现可能因为硬件平台、开发环境和开发者需求而有所不同。因此,如果想要详细了解STM32F103的YModem例子程序,请查阅相关STM32F103的手册、参考文档或官方例程,以了解具体的实现细节。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值