本文介绍: E:tfsdatasmartsafeN32G430Nations.N32G430_Library.1.0.0projectsn32g430_EVALexamplesUSARTInterrupt开发uart1和uart3驱动。Uart1_tx引脚使用PA9,重映射使用AF5,Uart1_rx引脚使用PA10,重映射使用AF5,Uart3_tx引脚使用PB10,重映射使用AF10,Uart3_Rx引脚使用PB11,重映射使用AF10。配置IO的复用功能为UART。4、uart中断响应函数。
参考demo
E:tfsdatasmartsafeN32G430Nations.N32G430_Library.1.0.0projectsn32g430_EVALexamplesUSARTInterrupt开发uart1和uart3驱动。Uart1用于通信,uart3用于调试。
参考用户手册5.2.5复用功能。Uart1_tx引脚使用PA9,重映射使用AF5,Uart1_rx引脚使用PA10,重映射使用AF5,Uart3_tx引脚使用PB10,重映射使用AF10,Uart3_Rx引脚使用PB11,重映射使用AF10。
串口使用ringbuffer,中断方式接收和发送。
1、配置时钟
包括GPIO时钟和uart时钟。
void RCC_Configuration(void)
{
/* Enable GPIO clock */
RCC_AHB_Peripheral_Clock_Enable(USARTy_GPIO_CLK | USARTz_GPIO_CLK);
/* Enable USARTy and USARTz Clock */
USARTy_APBxClkCmd(USARTy_CLK);
USARTz_APBxClkCmd(USARTz_CLK);
}
2、配置IO
配置IO的复用功能为UART。
void GPIO_Configuration(void)
{
GPIO_InitType GPIO_InitStructure;
/* Initialize GPIO_InitStructure */
GPIO_Structure_Initialize(&GPIO_InitStructure);
/* Configure USARTy Tx as alternate function push-pull */
GPIO_InitStructure.Pin = USARTy_TxPin;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Alternate = USARTy_Tx_GPIO_AF;
GPIO_Peripheral_Initialize(USARTy_GPIO, &GPIO_InitStructure);
/* Configure USARTz Tx as alternate function push-pull */
GPIO_InitStructure.Pin = USARTz_TxPin;
GPIO_InitStructure.GPIO_Alternate = USARTz_Tx_GPIO_AF;
GPIO_Peripheral_Initialize(USARTz_GPIO, &GPIO_InitStructure);
/* Configure USARTx Rx as alternate function push-pull */
GPIO_InitStructure.Pin = USARTy_RxPin;
GPIO_InitStructure.GPIO_Alternate = USARTy_Rx_GPIO_AF;
GPIO_Peripheral_Initialize(USARTy_GPIO, &GPIO_InitStructure);
/* Configure USARTz Rx as alternate function push-pull */
GPIO_InitStructure.Pin = USARTz_RxPin;
GPIO_InitStructure.GPIO_Alternate = USARTz_Rx_GPIO_AF;
GPIO_Peripheral_Initialize(USARTz_GPIO, &GPIO_InitStructure);
}
3、配置UART
包括初始化uart,使能uart中断,使能uart外设等。
/* USARTy and USARTz configuration ------------------------------------------------------*/
USART_InitStructure.BaudRate = 115200;
USART_InitStructure.WordLength = USART_WL_8B;
USART_InitStructure.StopBits = USART_STPB_1;
USART_InitStructure.Parity = USART_PE_NO;
USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;
/* Configure USARTy and USARTz */
USART_Initializes(USARTy, &USART_InitStructure);
USART_Initializes(USARTz, &USART_InitStructure);
/* Enable USARTy Receive and Transmit interrupts */
USART_Interrput_Enable(USARTy, USART_INT_RXDNE);
USART_Interrput_Enable(USARTy, USART_INT_TXDE);
/* Enable USARTz Receive and Transmit interrupts */
USART_Interrput_Enable(USARTz, USART_INT_RXDNE);
USART_Interrput_Enable(USARTz, USART_INT_TXDE);
/* Enable the USARTy and USARTz */
USART_Enable(USARTy);
USART_Enable(USARTz);
4、uart中断响应函数
void COM_UART_IRQHandler(void)
{
uint8_t data;
if (USART_Interrupt_Status_Get(COM_UART, USART_INT_RXDNE) != RESET)
{
data = USART_Data_Receive(COM_UART);
ringBuffer_write(pcomUartRxRingBuffer,data);
}
if (USART_Interrupt_Status_Get(COM_UART, USART_INT_TXDE) != RESET)
{
if (ringBuffer_is_empty(p_comUartTxRingBuffer))
{
/*没有发送数据时要关闭串口发送中断*/
/* Disable the COM_UART Transmit interrupt */
USART_Interrput_Disable(COM_UART, USART_INT_TXDE);
}
else
{
ringBuffer_read(p_comUartTxRingBuffer,&data);
USART_Data_Send(COM_UART, data);
}
}
}
原文地址:https://blog.csdn.net/sscb0521/article/details/135825482
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_61433.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。