CIU32L030系列 串口代码例程和选型 技术讨论 支持
/**
* @brief UART��ʼ��
* @param uartx UART����
* @param uart_init_param UART��ʼ���ṹ��
* @retval std_status_t ���س�ʼ�����ý��
*/
std_status_t std_uart_init(UART_t *uartx,std_uart_init_t *uart_init_param)
{
/* ���� UART �ֳ� ���շ�ģʽ��У��*/
MODIFY_REG(uartx->CR1,
(UART_CR1_WL | UART_CR1_TE | UART_CR1_RE | UART_CR1_PTS | UART_CR1_PEN),
(uart_init_param->wordlength | uart_init_param->direction | uart_init_param->parity));
/* ����UARTֹͣλ */
std_uart_set_stopbits(uartx,uart_init_param->stopbits);
/* ������ */
if(std_uart_baudrate_config(uartx,uart_init_param->baudrate) != STD_OK)
{
return STD_ERR;
}
return STD_OK;
}
/**
* @brief UARTȥ��ʼ��
* @param uartx UART����
* @retval ��
*/
void std_uart_deinit(UART_t *uartx)
{
if(uartx == UART1)
{
/* ��λUART1 */
std_rcc_apb2_reset(RCC_PERIPH_RESET_UART1);
/* �ر�UART1ʱ�� */
std_rcc_apb2_clk_disable(RCC_PERIPH_CLK_UART1);
}
else if(uartx == UART2)
{
/* ��λUART2 */
std_rcc_apb1_reset(RCC_PERIPH_RESET_UART2);
/* �ر�UART2ʱ�� */
std_rcc_apb1_clk_disable(RCC_PERIPH_CLK_UART2);
}
}
/**
* @brief UART�ṹ���ʼ��
* @param uart_init_struct UART�ṹ��
* @retval ��
*/
void std_uart_struct_init(std_uart_init_t *uart_init_struct)
{
uart_init_struct->baudrate = 115200;
uart_init_struct->wordlength = UART_WORDLENGTH_8BITS;
uart_init_struct->stopbits = UART_STOPBITS_1;
uart_init_struct->direction = UART_DIRECTION_SEND_RECEIVE;
uart_init_struct->parity = UART_PARITY_NONE;
}
/**
* @brief ����UART������
* @param uartx UART����
* @param baudrate ������
* @retval std_status_t ���ز��������ý��
*/
std_status_t std_uart_baudrate_config(UART_t *uartx, uint32_t baudrate)
{
uint32_t pclk;
uint32_t brr_value;
/* ��ȡUARTʱ��Ƶ�� */
pclk = std_rcc_get_pclkfreq();
brr_value = (((pclk) + ((baudrate) >> 1U)) / (baudrate));
/* BRRȡֵ��Χ[0x10,0xFFFF], �������0x10(0d16) */
if ((brr_value >= UART_BRR_MIN) && (brr_value <= UART_BRR_MAX))
{
uartx->BRR = (uint32_t)brr_value;
return STD_OK;
}
else
{
return STD_ERR;
}
}
/**
* @}
*/
#endif /* STD_UART_PERIPHERAL_USED */
/**
* @}
*/
/**
* @}
*/
主要型号讨论