本帖最后由 YangTwo 于 2022-11-7 15:25 编辑
非常感谢论坛提供的这次体验AVR单片机的机会,这次的主控芯片是:AVR64DD32,属于AVR DD系列。该系列以AVR架构的低功耗性能为基础,采用世界级的核心独立外设(CIPs)选择和全负载智能模拟组合,功能强大。
此外,AVR DD系列具有全面的功能集,包括多电压输入/输出(MVIO),非常适合复杂的应用,或作为具有多个电源域的复杂设计中的配套微控制器(MCU)。
官方Github提供了非常丰富的例程用于快速上手:Curiosity Nano Out-of-the-Box Code using AVR64DD32 Microcontroller with MCC Melody。
本次工程在此基础上增加了串口回显的程序,用户可以通过串口发送1, 2, 3, 4 来决定进入哪个子程序。
第一步增加第四种程序模式:UART_SENDBACK即本工程的核心
typedef enum {BLINKY, BUTTON, RAMP, UART_SENDBACK} programs_t;
第二步增加Switch-case语句相关分支:
case '4':
LED_SetHigh();
current_program = UART_SENDBACK;
printf("Program changed to send string back to PC through USART\r\n");
break;
第三步是串口回显的核心代码:
static void Send_DataBack2PC_UART(void){
uint8_t i = 0;
unsigned char TempChar = USART0_Read();
memset(MyRx, 0, sizeof(MyRx));
//while(((TempChar = USART0_Read()) != 32)&&((TempChar = USART0_Read()) != '\n'));
if(TempChar == '1' || TempChar == '2' || TempChar == '3'){
CLI_Execute_Command(TempChar);
return;
}
while((TempChar = USART0_Read()) != '\0'){
if(TempChar != '\n')
MyRx[i++] = TempChar;
else
break;
}
MyRx[i] = '\0';
if(MyRx[0] != '\0'){
printf("SendBacktoPC: %s\r\n", MyRx);
}
i = 0;
}
首先,我们对串口发来的字符串的第一个字符进行检测,如果是1,2,3则需要立即结束该子程序,因为1,2,3,4是用来控制进入哪个子程序的。如果不是1,2,3,继续往下执行。
最后是串口回显的结果展示:
|