dsjsjf 发表于 2019-3-1 11:09

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

<div class='showpostmsg'> 本帖最后由 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及串口空闲中断

二、生成工程,修改原以太网接收回传处理函数
static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p,err_t
                                 err)
{
//tcp_write(tpcb,p->payload,p->len,1);
HAL_UART_Transmit_DMA(&huart3, (uint8_t *)p->payload, p->len);//这里将TCP接收到的数据,通过串口发送
pbuf_free(p);
return ERR_OK;
}

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

static uint8_t UsartRcvBuff;
static uint16_t DataLength;
void UsartIdle_Callback(void)
{
uint32_t TmpFlag = 0;

TmpFlag = __HAL_UART_GET_FLAG(&huart3, UART_FLAG_IDLE);
if ((TmpFlag != RESET))
{
    __HAL_UART_CLEAR_IDLEFLAG(&huart3);
    HAL_UART_AbortReceive_IT(&huart3);

    DataLength = 512 - (__HAL_DMA_GET_COUNTER((DMA_HandleTypeDef *)&hdma_usart3_rx));
    osSignalSet(defaultTaskHandle, 1);
}
}

void USART3_IRQHandler(void)
{
/* USER CODE BEGIN USART3_IRQn 0 */
extern void UsartIdle_Callback(void);
/* USER CODE END USART3_IRQn 0 */
HAL_UART_IRQHandler(&huart3);
/* USER CODE BEGIN USART3_IRQn 1 */
UsartIdle_Callback();      //此处添加串口空闲处理调用
/* USER CODE END USART3_IRQn 1 */
}

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

/* USER CODE BEGIN 5 */
osEvent Event;
tcp_echoserver_init();
__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
HAL_UART_Receive_DMA(&huart3, UsartRcvBuff, 512);
/* Infinite loop */
for(;;)
{
    Event = osSignalWait(1, 20);
    if (Event.status == osEventSignal)
    {
      if(tcp_echoserver_pcb !=NULL)
      {
      tcp_write(tcp_echoserver_pcb, UsartRcvBuff, DataLength,1);
      }
      HAL_UART_Receive_DMA(&huart3, UsartRcvBuff, 512);
    }
}
/* USER CODE END 5 */
}
五、编译运行测试,以太网与串口数据相互转换OK


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




</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: 【 ST NUCLEO-H743ZI测评】(3)以太网转串口测试