打印
[活动专区]

【AT-START-F423测评】+ USART与液晶显示

[复制链接]
1060|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forgot|  楼主 | 2023-11-16 21:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 forgot 于 2023-11-16 21:37 编辑

      因为之前评测过一次F407,所以MDK环境下面早就已经安装好了AT32的相关支持包;这次的评测是通过USART2PC端进行收发数据,将接收到的数据显示在OLED上,并且通过循环发送不同的数据点亮3LED


硬件连接:
PA2\PA3连接串口工具
PD4\PD6连接OLED液晶模拟I2C时序
PD13\PD14\PD15已经连接在了LED上



软件部分:
初始化时钟、串口2、LED、OLED等;
保留串口1进行打印;
通过串口2的中断获取接收数据;
对数据进行显示和电灯操作;
int main(void)
{
  system_clock_config();
  at32_board_init();
  uart_print_init(115200);
        //oled
        MY_GPIO_Init();
        MY_OLED_Init();
        MY_OLED_START();
        //usart
        usart_configuration();
  while(usart_flag_get(USART2, USART_TDBE_FLAG) == RESET);
  usart_data_transmit(USART2, 0xFF);
  while(usart_flag_get(USART2, USART_RDBF_FLAG) == RESET);
  usart_data_receive(USART2);
        delay_sec(2);
  while(1)
  {
                MY_OLED_SHOW(usart_rev);
                MY_LED_SHOW(usart_rev);
        }
}
//MY TEST 21ic:forgot
void MY_OLED_START(void)
{
    int i;
    static int power_on = 0;
    char Line[4][20];

    if(!power_on) {
        power_on = 1;
        memcpy(&Line[0][0],"Hello 21ic!",sizeof("Hello 21ic!"));
         memcpy(&Line[1][0],"AT_START_F423",sizeof("AT_START_F423"));
         memcpy(&Line[2][0],"ID:forgot",sizeof("ID:forgot"));
         memcpy(&Line[3][0],"2023.11.12",sizeof("2023.11.12"));
        OLED_Clear();
        for(i = 0; i < 4; i++) {
            OLED_ShowString(0,i*2,(u8 *)&Line[i][0],16);
        }
    }
                Show_Rev();
}

void MY_OLED_SHOW(char n)
{
        static char m;
        char p[2] = {0};
        
        if(m != n){
          m = n;
          sprintf(p,"%d",m);
          OLED_Clear();
          OLED_ShowString(0,0,"****************",16);
          OLED_ShowString(0,2,(u8 *)"REV FROM PC",16);
          OLED_ShowString(0,4,"num:",16);
          OLED_ShowString(30,4,(u8 *)p,16);
          OLED_ShowString(0,6,"****************",16);
        }
}

void MY_LED_SHOW(char n)
{
        if(n&0x01){
        at32_led_on(LED2);
        }else{
        at32_led_off(LED2);
        }
        if(n&0x02){
        at32_led_on(LED3);
        }else{
        at32_led_off(LED3);
        }
        if(n&0x04){
        at32_led_on(LED4);
        }else{
        at32_led_off(LED4);
        }
}

PC端工具

效果展示:
开机界面

串口接收

使用特权

评论回复
沙发
forgot|  楼主 | 2023-11-17 09:04 | 只看该作者
其实现在对于AT的寄存器很多命名方式还是没熟悉,感觉配置起来还是要学习一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1729

主题

13056

帖子

54

粉丝