打印

STM32 串口中断问题

[复制链接]
2281|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuluyiyi|  楼主 | 2012-7-26 10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
int main(void)
{
   
  RCC_Configuration();
  GPIO_Configuration();           
  /* NVIC configuration */
  NVIC_Configuration();
  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_Init(USART2, &USART_InitStructure);
  USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

  USART_Cmd(USART2, ENABLE);
  while (1)
  {
   
  }
}

void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  /* Enable the USARTx Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
void USART2_IRQHandler(void)
{
  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  {
    /* Read one byte from the receive data register */
    RxBuffer[RxCounter++] = (USART_ReceiveData(USART2) & 0x7F);
    if(RxCounter == NbrOfDataToRead)
    {
      /* Disable the EVAL_COM1 Receive interrupt */
      USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
    }
  }
  if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET)
  {   
    /* Write one byte to the transmit data register */
    USART_SendData(USART2, TxBuffer[TxCounter++]);
    if(TxCounter == NbrOfDataToTransfer)
    {
      /* Disable the EVAL_COM1 Transmit interrupt */
      USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
    }
  }
}
void RCC_Configuration(void)
{
  ErrorStatus HSEStartUpStatus;
  RCC_HSEConfig(RCC_HSE_ON);//开启HSE
  HSEStartUpStatus=RCC_WaitForHSEStartUp(); //等待HSE高速晶振稳定
  if(HSEStartUpStatus==SUCCESS)
  { RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置高速总线时钟
    RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速时钟
RCC_PCLK1Config(RCC_HCLK_Div2);  //设置低速时钟
FLASH_SetLatency(FLASH_Latency_2);//延时
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//设置PLL时钟源及倍频数
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
RCC_PLLCmd(ENABLE);//使能PLL锁相环
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟
while(RCC_GetSYSCLKSource()!=0x08);

  }
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  /* GPIOA and GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
}
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

请大家帮忙看看,这个是官方的例程,USART没有数据输出,不知道是哪里有问题?
沙发
haitianhappy| | 2012-7-26 11:36 | 只看该作者
你的一步一步调试 先仿真一下看看串口是否打开啦

使用特权

评论回复
板凳
qiujiahongde| | 2012-7-26 13:04 | 只看该作者
RCC_Configuration函数里面加RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

使用特权

评论回复
地板
yuluyiyi|  楼主 | 2012-7-27 11:09 | 只看该作者
串口开了 2# haitianhappy

使用特权

评论回复
5
yuluyiyi|  楼主 | 2012-7-27 11:10 | 只看该作者
这个之前是加上的,还是没有数据输出 3# qiujiahongde

使用特权

评论回复
6
qiujiahongde| | 2012-7-28 23:18 | 只看该作者
你代码里面少了次软件触发中断!!

使用特权

评论回复
7
qiujiahongde| | 2012-7-28 23:24 | 只看该作者
而且这个列程,似乎是要发送和接收接到一起的;给你传一个能跑的!!

2.USART1_Printf.rar

2.98 MB

使用特权

评论回复
8
yuluyiyi|  楼主 | 2012-7-31 09:41 | 只看该作者
软件触发中断如何加呢 6# qiujiahongde

使用特权

评论回复
9
beyond696| | 2012-7-31 13:22 | 只看该作者
http://www.viewtool.com/bbs/foru ... d=79&extra=page%3D1串口中断接收源码下载,调试通过!

使用特权

评论回复
10
电子机器人| | 2012-7-31 14:18 | 只看该作者
查看一下硬件是否符合

使用特权

评论回复
11
thinkingpadcui| | 2012-7-31 14:58 | 只看该作者
代码貌似木有什么问题  看一下硬件连接 是否完好

使用特权

评论回复
12
yuluyiyi|  楼主 | 2012-7-31 16:22 | 只看该作者
用查询方式试过了,收和发都正常,但是中断就是进不去 11# thinkingpadcui

使用特权

评论回复
13
qiaoshb| | 2012-7-31 17:30 | 只看该作者
查看下启动代码初始化中断向量表的外部变量(相应中断的中断处理函数名)与真实的中断处理函数名是否相同?

使用特权

评论回复
14
yuluyiyi|  楼主 | 2012-8-1 08:47 | 只看该作者
本帖最后由 yuluyiyi 于 2012-8-1 10:48 编辑

DCD     USART1_IRQHandler         ; USART1
                DCD     USART2_IRQHandler         ; USART2
                DCD     USART3_IRQHandler         ; USART3
                DCD     EXTI15_10_IRQHandler      ; EXTI Line 15..10
没有UART4对应的中断函数名……如果我想用UART4的中断函数怎么办呢 13# qiaoshb

使用特权

评论回复
15
yuluyiyi|  楼主 | 2012-8-2 09:43 | 只看该作者
把启动代码更换成大容量的启动文件就可以运行了,已经调试通过,谢谢:)

使用特权

评论回复
16
liubuwai| | 2012-8-2 12:20 | 只看该作者
引脚不对  我的是9 和 10  你看看你自己的硬件图

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

72

帖子

0

粉丝