久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5595|回復: 5
收起左側

stm32f407的串口2中斷服務函數進不去

[復制鏈接]
ID:448382 發表于 2019-11-22 21:57 | 顯示全部樓層 |閱讀模式
現在的問題是串口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);   
}  
}
研究一下午了,沒有進展
尋求幫助,感激不盡
回復

使用道具 舉報

ID:123289 發表于 2019-11-23 10:13 | 顯示全部樓層
1、比串口2更高級的中斷是否尚未退出?(例如:在其它中斷中死等,不出來)
2、中斷是否被允許并打開?
回復

使用道具 舉報

ID:470332 發表于 2019-11-23 15:31 | 顯示全部樓層
估計你的中斷優先級、中斷源沒配置好
回復

使用道具 舉報

ID:448382 發表于 2019-11-23 17:14 | 顯示全部樓層
yzwzfyz 發表于 2019-11-23 10:13
1、比串口2更高級的中斷是否尚未退出?(例如:在其它中斷中死等,不出來)
2、中斷是否被允許并打開?

問題找到了,就是NVIC配置的問題,感謝!!
回復

使用道具 舉報

ID:317861 發表于 2021-10-30 11:01 | 顯示全部樓層
帕里亞奇 發表于 2019-11-23 17:14
問題找到了,就是NVIC配置的問題,感謝!

NVIC應該怎么配置?我和你遇到的問題一樣,串口2不進接收中斷
回復

使用道具 舉報

ID:1043155 發表于 2022-8-28 21:56 | 顯示全部樓層
@kui 發表于 2021-10-30 11:01
NVIC應該怎么配置?我和你遇到的問題一樣,串口2不進接收中斷

老哥,你的問題解決了嗎?我也遇到和你一樣的問題。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产情侣啪啪 | 久久黄视频 | 日日骚网 | 成人福利在线 | 中文字幕日韩欧美一区二区三区 | 中文字幕在线视频网站 | 精品视频在线观看 | 国产成人99久久亚洲综合精品 | 97久久超碰 | 成人在线免费观看 | 草久在线 | 丝袜 亚洲 欧美 日韩 综合 | 精品国产伦一区二区三区观看方式 | 国产精品毛片一区二区三区 | 精品一区二区三区四区外站 | 九九热精品视频在线观看 | www.国产精| 午夜精品一区二区三区在线观看 | 视频一区二区中文字幕 | 日本精品一区二区三区在线观看 | 日韩免费一级 | 欧美日韩三区 | 中文字幕亚洲精品 | 国产综合久久久 | 日韩中文一区二区三区 | 欧美啪啪 | 亚洲一区 中文字幕 | 中午字幕在线观看 | 毛片一区二区 | 亚洲一区二区三区在线观看免费 | 免费观看一级特黄欧美大片 | 69亚洲精品 | 久久亚洲春色中文字幕久久久 | 欧美日韩不卡 | 夜夜爽99久久国产综合精品女不卡 | 日韩二三区 | 嫩草视频网 | 亚洲a在线观看 | 亚洲欧美日韩在线不卡 | 日韩免费视频 | 四虎最新视频 |