社区导航

 

搜索
查看: 389|回复: 0

[原创] 【 ST NUCLEO-H743ZI测评】(3)以太网转串口测试

[复制链接]

33

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-3-1 11:09 | 显示全部楼层 |阅读模式
本帖最后由 dsjsjf 于 2019-3-1 11:16 编辑

本次活动测评开发板ST NUCLEO-H743ZI由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!
STM32H7
NUCLEO_H743ZI

【 ST NUCLEO-H743ZI测评】(1)初识ST NUCLEO-H743ZI
【 ST NUCLEO-H743ZI测评】(2)以太网测试

有了昨天的以太网回传测试,今天的以太网转串口就顺利多了。
一、首先在昨天工程的基础上,配置串口,这里用到了DMA及串口空闲中断
11-使能USART3及DMA.jpg 12-使能USART3全局中断.jpg
二、生成工程,修改原以太网接收回传处理函数
  1. static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p,err_t
  2.                                  err)
  3. {
  4. //  tcp_write(tpcb,p->payload,p->len,1);
  5.   HAL_UART_Transmit_DMA(&huart3, (uint8_t *)p->payload, p->len);//这里将TCP接收到的数据,通过串口发送
  6.   pbuf_free(p);
  7.   return ERR_OK;
  8. }
复制代码


三、添加串口空闲处理函数,并在串口中断用调用

  1. static uint8_t UsartRcvBuff[512];
  2. static uint16_t DataLength;
  3. void UsartIdle_Callback(void)
  4. {
  5.   uint32_t TmpFlag = 0;

  6.   TmpFlag = __HAL_UART_GET_FLAG(&huart3, UART_FLAG_IDLE);
  7.   if ((TmpFlag != RESET))
  8.   {
  9.     __HAL_UART_CLEAR_IDLEFLAG(&huart3);
  10.     HAL_UART_AbortReceive_IT(&huart3);

  11.     DataLength = 512 - (__HAL_DMA_GET_COUNTER((DMA_HandleTypeDef *)&hdma_usart3_rx));
  12.     osSignalSet(defaultTaskHandle, 1);
  13.   }
  14. }
复制代码

  1. void USART3_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN USART3_IRQn 0 */
  4.   extern void UsartIdle_Callback(void);
  5.   /* USER CODE END USART3_IRQn 0 */
  6.   HAL_UART_IRQHandler(&huart3);
  7.   /* USER CODE BEGIN USART3_IRQn 1 */
  8.   UsartIdle_Callback();        //此处添加串口空闲处理调用
  9.   /* USER CODE END USART3_IRQn 1 */
  10. }
复制代码


四、在任务中添加处理串口接收到的数据,并通过以太网发送
  1. void StartDefaultTask(void const * argument)
  2. {
  3.   /* init code for LWIP */
  4.   MX_LWIP_Init();

  5.   /* USER CODE BEGIN 5 */
  6.   osEvent Event;
  7.   tcp_echoserver_init();
  8.   __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
  9.   HAL_UART_Receive_DMA(&huart3, UsartRcvBuff, 512);
  10.   /* Infinite loop */
  11.   for(;;)
  12.   {
  13.     Event = osSignalWait(1, 20);
  14.     if (Event.status == osEventSignal)
  15.     {
  16.       if(tcp_echoserver_pcb !=NULL)
  17.       {
  18.         tcp_write(tcp_echoserver_pcb, UsartRcvBuff, DataLength,1);
  19.       }
  20.       HAL_UART_Receive_DMA(&huart3, UsartRcvBuff, 512);
  21.     }
  22.   }
  23.   /* USER CODE END 5 */
  24. }
复制代码

五、编译运行测试,以太网与串口数据相互转换OK
13-测试结果.jpg

此内容由EEWORLD论坛网友dsjsjf原创,如需转载或用于商业用途需征得作者同意并注明出处




此帖出自stm32/stm8论坛


回复

使用道具 举报

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

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-6-26 21:56 , Processed in 0.080486 second(s), 18 queries , Gzip On, MemCache On.

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