forgot 发表于 2023-1-6 10:17

【AT-START-F407测评】+ OLED液晶显示TCP接收数据

本帖最后由 forgot 于 2023-1-6 10:33 编辑

    参加本次活动申请的是雅特力的F407板子,主要看中的就是MCU高效能以太网口模块,之前做过的很多项目用的是en28j60,w5500这种外置emac,用过的内置mac项目还是很久之前的microchip的pic8位单片机。正好借这次机会体验一下,为以后的项目开发做个备选。
    厂家的资料做的很全,从官网上下载下来,软硬件文档应有尽有,板子也很漂亮。这是从官网下载的一些必要文件。
    首先是跑一下Firmware_Library中的examples,其中的emc文件夹下有dns、mqtt_client、tcp_client、tcp_server等例程,都是基于middlewares中的lwip_2.1.2写的。其中tcp_client是主动发送一串数据到tcp_server,并且接收到tcp_server的数据之后再回传。
1、基于这个例程,添加自己的oled.c、oled.h、oledfont.h等文件。2、屏是1.3寸的OLED,IIC通讯接口选取PD2、PD4、PD6分别作为OLED的RET、SCLK、SDIN引脚。//管脚配置
#define RET_PIN                         GPIO_PINS_2
#define RET_GPIO                        GPIOD
#define RET_GPIO_CRM_CLK                CRM_GPIOD_PERIPH_CLOCK

#define SCLK_PIN                         GPIO_PINS_4
#define SCLK_GPIO                        GPIOD
#define SCLK_GPIO_CRM_CLK                CRM_GPIOD_PERIPH_CLOCK

#define SDIN_PIN                         GPIO_PINS_6
#define SDIN_GPIO                        GPIOD
#define SDIN_GPIO_CRM_CLK                CRM_GPIOD_PERIPH_CLOCK

#define OLED_RET_Clr()      gpio_bits_write(RET_GPIO,RET_PIN,FALSE)
#define OLED_RET_Set()      gpio_bits_write(RET_GPIO,RET_PIN,TRUE)
#define OLED_SCLK_Clr()      gpio_bits_write(SCLK_GPIO,SCLK_PIN,FALSE)
#define OLED_SCLK_Set()      gpio_bits_write(SCLK_GPIO,SCLK_PIN,TRUE)
#define OLED_SDIN_Clr()      gpio_bits_write(SDIN_GPIO,SDIN_PIN,FALSE)
#define OLED_SDIN_Set()      gpio_bits_write(SDIN_GPIO,SDIN_PIN,TRUE)
3、添加各相关头文件,oled.c中采用at32f403a_407_board.c中的delay_us作为延时函数。void MY_Delay(unsigned int Del_s)
{
    unsigned int j;

#if 1
    delay_us(Del_s);
#else
    while(Del_s--) {
      for(j=0; j<20; j++);
    }
#endif
}
4、编写void MY_GPIO_Init(void);void MY_OLED_Init(void);      void MY_OLED_START(void);三个主要函数,其中MY_OLED_START();中实现开始显示及TCP接收打印功能。//液晶显示
void MY_OLED_START(void)
{
    int i;
    static int power_on = 0;
    char Line;

    if(!power_on) {
      power_on = 1;
      memcpy(&Line,"Hello 21ic!",sizeof("Hello 21ic!"));
      memcpy(&Line,"ID:forgot",sizeof("ID:forgot"));
      memcpy(&Line,"AT_START_F407",sizeof("AT_START_F407"));
      memcpy(&Line,"EMAC_TCP_TEST",sizeof("EMAC_TCP_TEST"));
      OLED_Clear();
      for(i = 0; i < 4; i++) {
            OLED_ShowString(0,i*2,(u8 *)&Line,16);
      }
    }
    Show_Rev();
}
5、在tcp_client.c中的tcp_client_recv函数里实现接收数据copy到液晶显示的show_buff[]中。//TCP接收数据
err_t tcp_client_recv(void *arg, struct tcp_pcb *pcb,struct pbuf *p,err_t err)
{
    if(p != NULL) {
      show_need = 1;
      memcpy(show_buff,p->payload,p->tot_len);
      tcp_recved(pcb, p->tot_len);
      tcp_write(pcb,p->payload,p->tot_len,TCP_WRITE_FLAG_COPY);
      tcp_output(pcb);
    } else {
      tcp_close(pcb);
    }
    pbuf_free(p);
    err = ERR_OK;
    return err;
}

6、在main.c中初始化oled。      MY_GPIO_Init();      MY_OLED_Init();在for(;;)中调用MY_OLED_START();int main(void)
{
    error_status status;

    system_clock_config();
    at32_board_init();
    nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
    delay_init();
    status = emac_system_init();
    while(status == ERROR);
    tcpip_stack_init();
    tcp_client_init(TCP_LOCAL_PORT,TCP_SERVER_PORT,TCP_SERVER_IP);
    MY_GPIO_Init();
    MY_OLED_Init();

    for(;;) {
      /* lwip receive handle */
      lwip_rx_loop_handler();
                        
      /*timeout handle*/
      lwip_periodic_handle(local_time);
                        
      /*oledshow*/
      MY_OLED_START();
    }
}
    这样就实现了开机显示:Hello 21ic!ID:forgotAT_START_F407EMAC_TCP_TEST     当接收到tcp_server的数据之后,显示:TCP_REV:XXXXXX 整体开机界面:
TCP发送&接收数据:
OLED显示TCP接收到数据:
视频链接:https://www.bilibili.com/video/BV1QG4y117Xe/
总结一下:    实际上除了emc,也尝试跑了一下其他的一些功能模块,ADC和usart等,这些都是个人比较常用的模块,感觉厂家的BSP做的非常好,给开发者提供的极大的便利性,在一些物联网关的项目,像网络收发服务器和串口收发服务器等产品上,这颗MCU确实非常不错的选择。
最后祝雅特力越做越好。
/***********************END***********************/

10299823 发表于 2023-2-2 13:38

TCP怎么实现ping通信呢?            

minzisc 发表于 2023-2-2 13:47

在哪里下载的相关的例程呢            

linfelix 发表于 2023-2-2 14:25

为什么不使用串口发送tcp的数据?

wilhelmina2 发表于 2023-2-4 11:23

这个w5500传输速度怎么样            

51xlf 发表于 2023-2-4 12:21

这个可以做http的数据获取?            

wwppd 发表于 2023-2-4 15:30

厂家的板子做的确实不错,资料也很全面的。
页: [1]
查看完整版本: 【AT-START-F407测评】+ OLED液晶显示TCP接收数据