現在的問題是串口1收發正常,串口2可以向單片機發送數據,但是不能接收不到。
測試一下發現串口2接收中斷函數根本進不去
以下是串口配置的代碼
下面是里面的宏
//引腳定義
/*******************************************************/
#define DEBUG_USART USART1
#define DEBUG_USART_CLK RCC_APB2Periph_USART1
#define DEBUG_USART_BAUDRATE 115200 //串口波特率
#define DEBUG_USART_RX_GPIO_PORT GPIOA
#define DEBUG_USART_RX_GPIO_CLK RCC_AHB1Periph_GPIOA
#define DEBUG_USART_RX_PIN GPIO_Pin_10
#define DEBUG_USART_RX_AF GPIO_AF_USART1
#define DEBUG_USART_RX_SOURCE GPIO_PinSource10
#define DEBUG_USART_TX_GPIO_PORT GPIOA
#define DEBUG_USART_TX_GPIO_CLK RCC_AHB1Periph_GPIOA
#define DEBUG_USART_TX_PIN GPIO_Pin_9
#define DEBUG_USART_TX_AF GPIO_AF_USART1
#define DEBUG_USART_TX_SOURCE GPIO_PinSource9
#define DEBUG_USART_IRQHandler USART1_IRQHandler
#define DEBUG_USART_IRQ USART1_IRQn
/************************************************************/
#define MPU6050_USART USART2
#define MPU6050_USART_CLK RCC_APB1Periph_USART2
#define MPU6050_USART_BAUDRATE 9600 //串口波特率
#define MPU6050_USART_RX_GPIO_PORT GPIOA
#define MPU6050_USART_RX_GPIO_CLK RCC_AHB1Periph_GPIOA
#define MPU6050_USART_RX_PIN GPIO_Pin_3
#define MPU6050_USART_RX_AF GPIO_AF_USART2
#define MPU6050_USART_RX_SOURCE GPIO_PinSource3
#define MPU6050_USART_TX_GPIO_PORT GPIOA
#define MPU6050_USART_TX_GPIO_CLK RCC_AHB1Periph_GPIOA
#define MPU6050_USART_TX_PIN GPIO_Pin_2
#define MPU6050_USART_TX_AF GPIO_AF_USART2
#define MPU6050_USART_TX_SOURCE GPIO_PinSource2
#define MPU6050_USART_IRQHandler USART2_IRQHandler
#define MPU6050_USART_IRQ USART2_IRQn
/************************************************************/
以及常規的串口配置
void Debug_USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/* GPIO初始化 */
RCC_AHB1PeriphClockCmd(DEBUG_USART_RX_GPIO_CLK|DEBUG_USART_TX_GPIO_CLK,ENABLE);
/* GPIO初始化 */
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* 配置Tx引腳為復用功能 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_PIN ;
GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
/* 配置Rx引腳為復用功能 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_PIN;
GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
/* 將引腳配置成什么復用功能 */
/* 連接 PXx 到 USARTx_Tx*/
GPIO_PinAFConfig(DEBUG_USART_RX_GPIO_PORT,DEBUG_USART_RX_SOURCE,DEBUG_USART_RX_AF);
/* 連接 PXx 到 USARTx__Rx*/
GPIO_PinAFConfig(DEBUG_USART_TX_GPIO_PORT,DEBUG_USART_TX_SOURCE,DEBUG_USART_TX_AF);
/* 配置串口初始化結構體 */
/* 使能 USART 時鐘 */
RCC_APB2PeriphClockCmd(DEBUG_USART_CLK, ENABLE);
/* 配置串DEBUG_USART 模式 */
/* 波特率設置:DEBUG_USART_BAUDRATE */
USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
/* 字長(數據位+校驗位):8 */
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
/* 停止位:1個停止位 */
USART_InitStructure.USART_StopBits = USART_StopBits_1;
/* 校驗位選擇:不使用校驗 */
USART_InitStructure.USART_Parity = USART_Parity_No;
/* 硬件流控制:不使用硬件流 */
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
/* USART模式控制:同時使能接收和發送 */
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* 完成USART初始化配置 */
USART_Init(DEBUG_USART, &USART_InitStructure);
/* 配置串口接收中斷 */
/* 嵌套向量中斷控制器NVIC配置 */
NVIC_Configuration();
/* 使能串口接收中斷 */
USART_ITConfig(DEBUG_USART, USART_IT_RXNE, ENABLE);
/* 使能串口 */
USART_Cmd(DEBUG_USART, ENABLE);
}
void Mpu6050_USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/* GPIO初始化 */
RCC_AHB1PeriphClockCmd(MPU6050_USART_RX_GPIO_CLK|MPU6050_USART_TX_GPIO_CLK,ENABLE);
/* GPIO初始化 */
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* 配置Tx引腳為復用功能 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = MPU6050_USART_TX_PIN ;
GPIO_Init(MPU6050_USART_TX_GPIO_PORT, &GPIO_InitStructure);
/* 配置Rx引腳為復用功能 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = MPU6050_USART_RX_PIN;
GPIO_Init(MPU6050_USART_RX_GPIO_PORT, &GPIO_InitStructure);
/* 將引腳配置成什么復用功能 */
/* 連接 PXx 到 USARTx_Tx*/
GPIO_PinAFConfig(MPU6050_USART_RX_GPIO_PORT,MPU6050_USART_RX_SOURCE,MPU6050_USART_RX_AF);
/* 連接 PXx 到 USARTx__Rx*/
GPIO_PinAFConfig(MPU6050_USART_TX_GPIO_PORT,MPU6050_USART_TX_SOURCE,MPU6050_USART_TX_AF);
/* 配置串口初始化結構體 */
/* 使能 USART 時鐘 */
RCC_APB1PeriphClockCmd(MPU6050_USART_CLK, ENABLE);
/* 配置串DEBUG_USART 模式 */
/* 波特率設置:DEBUG_USART_BAUDRATE */
USART_InitStructure.USART_BaudRate = MPU6050_USART_BAUDRATE;
/* 字長(數據位+校驗位):8 */
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
/* 停止位:1個停止位 */
USART_InitStructure.USART_StopBits = USART_StopBits_1;
/* 校驗位選擇:不使用校驗 */
USART_InitStructure.USART_Parity = USART_Parity_No;
/* 硬件流控制:不使用硬件流 */
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
/* USART模式控制:同時使能接收和發送 */
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* 完成USART初始化配置 */
USART_Init(MPU6050_USART, &USART_InitStructure);
/* 配置串口接收中斷 */
/* 嵌套向量中斷控制器NVIC配置 */
NVIC_Configuration();
/* 使能串口接收中斷 */
USART_ITConfig(MPU6050_USART, USART_IT_RXNE, ENABLE);
/* 使能串口 */
USART_Cmd(MPU6050_USART, ENABLE);
}
中斷服務函數
void DEBUG_USART_IRQHandler(void)
{
uint8_t ucTemp;
if(USART_GetITStatus(DEBUG_USART,USART_IT_RXNE)!=RESET)
{
ucTemp = USART_ReceiveData( DEBUG_USART );
USART_SendData(DEBUG_USART,ucTemp);
}
}
void MPU6050_USART_IRQHandler(void)
{
uint8_t ucTemp;
if(USART_GetITStatus(MPU6050_USART,USART_IT_RXNE)!=RESET)
{
ucTemp = USART_ReceiveData( MPU6050_USART );
USART_SendData(MPU6050_USART,ucTemp);
}
}
研究一下午了,沒有進展 
尋求幫助,感激不盡
|