Microchip公司的SAME51系列芯片是cortex-m4内核,带有可以配置为UART\I2C\SPI\LIN等不同模块的SERCOM模块。其引脚功能框图如下:

目前关于这个开发板的资料不是很多,本次提供了MCC图形化配置工具配置SERCOM5、SERCOM3为UART模式。
其中SERCOM5使用的引脚为PB16: TX, PB17: RX。SERCOM3使用的引脚为PA22: TX, PA23: RX。
MCC图形化配置工具:在Device Resources -> Peripherals -> SERCOM,点击SERCOM3、SERCOM5前面的绿色+号,就可以把这两个模块添加到工程中。

配置SERCOM3的参数:


配置SERCOM5的参数:

点击Generate生成代码,注意查看输出是否有
16:58:21.925 INFO: HARMONY: [ MHC ] Executing generate hook 16:58:21.941 INFO: ***************************************************** 16:58:21.942 INFO: Generation complete (total time: 3470 milliseconds) 16:58:21.942 INFO: ***************************************************** 16:58:21.942 INFO: Generation complete. 16:58:22.890 INFO: HARMONY: [ python-print ] preGenerateEvent 16:58:22.890 INFO: HARMONY: [ python-print ] interfaceValidationEvent 16:58:22.890 INFO: HARMONY: [ python-print ] processDataModel 16:58:22.891 INFO: HARMONY: [ python-print ] postFinalProcessing
SYS_Initialize()中有SERCOM5、SERCOM3的初始化代码:
void SERCOM5_USART_Initialize( void )
{
/*
* Configures USART Clock Mode
* Configures TXPO and RXPO
* Configures Data Order
* Configures Standby Mode
* Configures Sampling rate
* Configures IBON
*/
SERCOM5_REGS->USART_INT.SERCOM_CTRLA = SERCOM_USART_INT_CTRLA_MODE_USART_INT_CLK | SERCOM_USART_INT_CTRLA_RXPO(0x1UL) | SERCOM_USART_INT_CTRLA_TXPO(0x0UL) | SERCOM_USART_INT_CTRLA_DORD_Msk | SERCOM_USART_INT_CTRLA_IBON_Msk | SERCOM_USART_INT_CTRLA_FORM(0x0UL) | SERCOM_USART_INT_CTRLA_SAMPR(0UL) ;
/* Configure Baud Rate */
SERCOM5_REGS->USART_INT.SERCOM_BAUD = (uint16_t)SERCOM_USART_INT_BAUD_BAUD(SERCOM5_USART_INT_BAUD_VALUE);
/*
* Configures RXEN
* Configures TXEN
* Configures CHSIZE
* Configures Parity
* Configures Stop bits
*/
SERCOM5_REGS->USART_INT.SERCOM_CTRLB = SERCOM_USART_INT_CTRLB_CHSIZE_8_BIT | SERCOM_USART_INT_CTRLB_SBMODE_1_BIT | SERCOM_USART_INT_CTRLB_RXEN_Msk | SERCOM_USART_INT_CTRLB_TXEN_Msk;
/* Wait for sync */
while((SERCOM5_REGS->USART_INT.SERCOM_SYNCBUSY) != 0U)
{
/* Do nothing */
}
/* Enable the UART after the configurations */
SERCOM5_REGS->USART_INT.SERCOM_CTRLA |= SERCOM_USART_INT_CTRLA_ENABLE_Msk;
/* Wait for sync */
while((SERCOM5_REGS->USART_INT.SERCOM_SYNCBUSY) != 0U)
{
/* Do nothing */
}
}使能SERCOM5、SERCOM3
SERCOM5_USART_Enable(); SERCOM3_USART_Enable();
通过下面简单的代码来使用双串口收发:
printf("\r\nEEPW-SAME51 DUAL SERIAL");
sprintf(sercom3TxBuf, "SERCOM3");
SERCOM3_USART_Write(sercom3TxBuf, sizeof(sercom3TxBuf));
while(1){
SERCOM3_USART_Read(sercom3RxBuf, sizeof(sercom3RxBuf));
printf(sercom3RxBuf);
}打开两个串口助手,下图中的上半部分的nEDBG CMSIS-DAP是SERCOM5,下半部分是SERCOM3实例化为UART.

总结:
SAME51单片机搭配MCC图形化配置工具,可以快速搭建双串口应用。代码自动生成技术节省了大量的开发时间并且提高了代码质量。
我要赚赏金
