本帖最后由 forgot 于 2023-11-16 21:37 编辑
因为之前评测过一次F407,所以MDK环境下面早就已经安装好了AT32的相关支持包;这次的评测是通过USART2与PC端进行收发数据,将接收到的数据显示在OLED上,并且通过循环发送不同的数据点亮3颗LED。
硬件连接: 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端工具
效果展示: 开机界面
串口接收
|