本帖最后由 jinglixixi 于 2022-11-8 10:53 编辑
AVR64DD32开发板配有串行通讯功能,通过它可实现PRINT打印及数据收发功能等。 其中UART0占用的是PD4和PD5,UART1占用的是PC0和PC1,见图1所示。
图1 UART引脚占用
使用UART0与外部的USB转TTL模块相连接,则可进行串行通讯及PRINT打印功能的测试,所用引脚见图2所示。
图2所用引脚
由于串行通讯程序的程序如下: #define LED_turnOn() do { PORTF.OUTCLR = PIN5_bm; } while (0)
#define LED_turnOff() do { PORTF.OUTSET = PIN5_bm; } while (0)
#define LED_toggle() do { PORTF.OUTTGL = PIN5_bm; } while (0)
void USART0_init(void)
{
//Init Callback
rxHandler = 0;
//Enable Run in Debug
USART0.DBGCTRL = USART_DBGRUN_bm;
//Enable RX Interrupts
USART0.CTRLA = USART_RXCIE_bm;
//Async Mode, No Parity, 1 Stop Bit, 8 bit TX
USART0.CTRLC = USART_CMODE_ASYNCHRONOUS_gc | USART_PMODE_DISABLED_gc | USART_SBMODE_1BIT_gc | USART_CHSIZE_8BIT_gc;
//Baud for 115,200 at 4 MHz Clock
USART0.BAUD = 139;
//Enable Normal Mode for USART
USART0.CTRLB = USART_RXMODE_NORMAL_gc;
//Note: Call enableTX/enableRX after this function
}
void USART0_initIO(void)
{
//Default Value for output should be 1
PORTD.OUTSET = PIN4_bm;
//Clear PORTMUX
PORTMUX.USARTROUTEA &= ~(PORTMUX_USART0_gm);
//Select PD4/PD5
PORTMUX.USARTROUTEA |= PORTMUX_USART0_ALT3_gc;
//Set PD4 as Output
PORTD.DIRSET = PIN4_bm;
//Set PD5 as Input
PORTD.DIRCLR = PIN5_bm;
}
int main(void) {
int i,j,k;
//Setup LED
LED_init();
LED_toggle ();
//Setup USART
USART0_initIO();
USART0_init();
//Enable TX and RX
USART0_enableTX();
USART0_enableRX();
while (1)
{
for(j=0;j<1000;j++)
for(i=0;i<1000;i++);
LED_toggle ();
USART_sendString("Welcome to the LED Command Processor!\r\n");
}
}
经程序的编译与下载,其运行结果如图3所示。 图3运行结果
此外,可以通过语句USART0_sendByte('C')来发送字符或字节数据,见图4和图5所示。 图4发送字符 图5 发送字节指令 发送字节指令的测试程序如下:
char cmd3[10] = {0X7E, 0xFF, 0x06, 0X03, 00, 00, 01, 0xFE, 0xF7, 0XEF};
while(1)
{
for(i=0;i<10;i++)
{
USART0_sendByte(cmd3[i]);
for(j=0;j<100;j++);
}
for(j=0;j<1000;j++) for(i=0;i<1000;i++);
}
在串口设备中,有许多是采用9600bps的波特率,这通过波特率的设置也是可以达到的,见图6所示。
图6变换波特率
以串口控制MP3语音模块的线路连接见图7所示,当触摸按键时,即播放第一首,再次触摸则播放下一首。 图7线路连接
MP3播放的演示视频:
|