国民技术芯片串口中断使用(拿去就能用系列)
·
芯片:N32G401系列
宏定义如下:使用串口1,如需使用其他串口,修改宏定义即可。
注意引脚复用号,同一个串口可以使用不同的引脚,复用号没对上
本人在使用中就遇到一个问题,使用串口4,PB0和PB1引脚,没有看手册直接查看头文件使用 GPIO_AF6_UART4 复用号,最终发现怎么配置串口都不生效,最后查看手册发现同一个串口下的不同引脚对应不同的复用号,串口4的PB0和PB1引脚对应复用号7,大家不要踩坑了。
#define USARTy USART1
#define USARTy_CLK RCC_APB2_PERIPH_USART1
#define USARTy_GPIO GPIOA
#define USARTy_GPIO_CLK RCC_AHB_PERIPH_GPIOA
#define USARTy_RxPin GPIO_PIN_10
#define USARTy_TxPin GPIO_PIN_9
#define USARTy_Rx_GPIO_AF GPIO_AF5_USART1
#define USARTy_Tx_GPIO_AF GPIO_AF5_USART1
#define USARTy_APBxClkCmd RCC_APB2_Peripheral_Clock_Enable
#define USARTy_IRQn USART1_IRQn
#define USARTy_IRQHandler USART1_IRQHandler
使能对应时钟
/* 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);
初始化引脚并配置中断
GPIO_InitType GPIO_InitStructure;
NVIC_InitType NVIC_InitStructure;
/* Initialize GPIO_InitStructure */
GPIO_Structure_Initialize(&GPIO_InitStructure);
/* Configure USARTy Tx as alternate function push-pull and pull-up */
GPIO_InitStructure.Pin = USARTy_TxPin;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Alternate = USARTy_Tx_GPIO_AF;
GPIO_InitStructure.GPIO_Pull = GPIO_PULL_UP;
GPIO_Peripheral_Initialize(USARTy_GPIO, &GPIO_InitStructure);
/* Configure USARTz Tx as alternate function push-pull and pull-up */
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 and pull-up */
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 and pull-up */
GPIO_InitStructure.Pin = USARTz_RxPin;
GPIO_InitStructure.GPIO_Alternate = USARTz_Rx_GPIO_AF;
GPIO_Peripheral_Initialize(USARTz_GPIO, &GPIO_InitStructure);
NVIC_Priority_Group_Set(NVIC_PER2_SUB2_PRIORITYGROUP);
/* Enable the USARTy Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USARTy_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Initializes(&NVIC_InitStructure);
/* Enable the USARTz Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USARTz_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Initializes(&NVIC_InitStructure);
初始化串口
USART_InitType USART_InitStructure;
/* USARTy and USARTz configuration ----------------------------------------------*/
USART_Structure_Initializes(&USART_InitStructure);
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);
/* Enable USARTy Receive and Transmit interrupts */
USART_Interrput_Enable(USARTy, USART_INT_RXDNE);
/* Enable the USARTy and USARTz */
USART_Enable(USARTy);
void USART1_IRQHandler(void)
{
if(USART_Flag_Status_Get(USART1,USART_FLAG_RXDNE) == SET)
{
USART_Flag_Clear(USART1,USART_FLAG_RXDNE);
}
}

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)