二、初始化USART1 本例TX为PA09,RX为PA10,其功能20对应USART1的TX和RX:
故本例使用UASRT1:
/* UART unit definition */ #define USART_FUNCTION_CLK_GATE (PWC_FCG3_USART1) /* UART RX/TX Port/Pin definition */ #define USART_RX_PORT (GPIO_PORT_A) /* PH13: USART1_RX */ #define USART_RX_PIN (GPIO_PIN_10) #define USART_RX_GPIO_FUNC (GPIO_FUNC_20_USART1_RX)
#define USART_TX_PORT (GPIO_PORT_A) /* PH15: USART1_TX */ #define USART_TX_PIN (GPIO_PIN_09) #define USART_TX_GPIO_FUNC (GPIO_FUNC_20_USART1_TX) /* Enable peripheral clock */ PWC_Fcg3PeriphClockCmd(USART_FUNCTION_CLK_GATE, Enable); /* Configure USART RX/TX pin. */ GPIO_SetFunc(USART_RX_PORT, USART_RX_PIN, USART_RX_GPIO_FUNC, PIN_SUBFUNC_DISABLE); GPIO_SetFunc(USART_TX_PORT, USART_TX_PIN, USART_TX_GPIO_FUNC, PIN_SUBFUNC_DISABLE);
使能时钟,给USART1上电,配置PA9和PA10的功能为TX和RX。
/* UART unit definition */ #define USART_UNIT (M4_USART1) #define USART_BAUDRATE (19200UL) #define USART_DATA_BITS (8U) #define USART_CHECK_BITS (0U) #define USART_STOP_BITS (1U) #define USART_FRAME_BITS (USART_DATA_BITS + USART_CHECK_BITS + \ USART_STOP_BITS + (1U))
const stc_usart_uart_init_t stcUartInit = { .u32Baudrate = USART_BAUDRATE, .u32BitDirection = USART_LSB, .u32StopBit = USART_STOPBIT_1BIT, .u32Parity = USART_PARITY_NONE, .u32DataWidth = USART_DATA_LENGTH_8BIT, .u32ClkMode = USART_INTERNCLK_OUTPUT, .u32PclkDiv = USART_PCLK_DIV16, .u32OversamplingBits = USART_OVERSAMPLING_8BIT, .u32NoiseFilterState = USART_NOISE_FILTER_DISABLE, .u32SbDetectPolarity = USART_SB_DETECT_FALLING, }; if (Ok != USART_UartInit(USART_UNIT, &stcUartInit)) { for (;;) { } }
参考官方例程写的,这个代码风格跟TRM和ADC的例程不一样。
- 波特率19200
- 左对齐
- 停止位1
- 校验位无
- 数据位8
- 时钟模式后面说
- 64分频
- 8位过采样,这个不是很清楚,猜测比特率为192,000,USART工作频率为6,250,000,为其32倍,32是个8位数。
时钟模式
当作UART使用,并使用内部时钟时,可以设置为00或者01,本例只有TX RX,没有配置CK脚,按道理可以配置成00。但是配置成00的话,CR1寄存器中的RTOF标志立不起来,串口也进不了TIMEOUT中断。例程里面用的是01。使用01后就没有这个故障,以后再找原因。
|