STM32F407的FreeModbus+FreeRTOS程序移植

自从开始了FreeModbus的移植,就会碰到多种多样的问题,目前主要关注几个方面。

1、下载最新的FreeModbus文件,放到工程文件中,网上有很多资料可以参考。

2、修改代码,主要是几个文件portserial.c,porttimer.c,user_mb_app.c,stm32f4xx_it.c,freertos.c。

3、修改内容参考网址http://www.stm32cube.com/question/19中的内容。

4、需要注意的是portserial.c文件中需要将函数中的FALSE,修改为TRUE。

BOOL
xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity )
{
    return FALSE;
}

 5、porttimer.c文件中需要将函数中的FALSE,修改为TRUE。

BOOL
xMBPortTimersInit( USHORT usTim1Timerout50us )
{
    return FALSE;
}

6、stm32f4xx_it.c文件中,修改中断函数中的内容。

void TIM4_IRQHandler(void)
{
  /* USER CODE BEGIN TIM4_IRQn 0 */
	prvvTIMERExpiredISR( );
  /* USER CODE END TIM4_IRQn 0 */
  HAL_TIM_IRQHandler(&htim4);
  /* USER CODE BEGIN TIM4_IRQn 1 */

  /* USER CODE END TIM4_IRQn 1 */
}

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  if(__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_RXNE)!= RESET) 
  {
     prvvUARTRxISR();
  }

  if(__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_TXE)!= RESET) 
  {
     prvvUARTTxReadyISR();
  }	

  HAL_NVIC_ClearPendingIRQ(USART1_IRQn);
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

7、最后在freertos.c的任务中添加Modbus处理函数。

void StartTaskMbSP(void const * argument)
{
  /* USER CODE BEGIN StartTaskMbSP */
  eMBInit(MB_RTU, 0x01, 1, 115200, MB_PAR_NONE);
  eMBEnable();
	
  /* Infinite loop */
  for(;;)
  {
    osDelay(1);
    eMBPoll();
  }
  /* USER CODE END StartTaskMbSP */
}

通过上述修改可实现FreeModbus的程序移植。

发布了1 篇原创文章 · 获赞 0 · 访问量 2

猜你喜欢

转载自blog.csdn.net/blue_helmet/article/details/105504626