打印

请问STM32的串口中断问题

[复制链接]
4341|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gucasyu|  楼主 | 2009-1-4 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前在学习SMT32是开发,请问我的串口中断为什么仿真不对,情况如下:
该有的配置都以完成,时钟  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);串口和串口中断使能,USART_Cmd(USART1, ENABLE);和USART_ITConfig(USART1, USART_IT_RXNE, ENABLE),然后main程序while(1)不停的等待。预想是串口有数据进来就进入中断void USART1_IRQHandler(void)服务程序,可是硬件仿真的时候一直进不去,软仿有数据,但不对。请问是什么问题呢?
沙发
gucasyu|  楼主 | 2009-1-5 11:50 | 只看该作者

有人能帮我解答下嘛

才开始学习。。不太懂。。能告诉我下嘛

使用特权

评论回复
板凳
qigongwei| | 2009-1-5 11:51 | 只看该作者

IO config、AFIO Clock

使用特权

评论回复
地板
香水城| | 2009-1-5 11:58 | 只看该作者

STM32固件库中有例子

请到ST网站下载固件库和例子。
相关链接:http://www.st.com/mcu/modules.php?name=mcu&file=familiesdocs&FAM=110

使用特权

评论回复
5
gucasyu|  楼主 | 2009-1-5 17:26 | 只看该作者

回3楼

I/O口已配置  
/* Configure USART1 Tx (PA.9) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
    
  /* Configure USART1 Rx (PA.10) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
另外AFIO也配置了啊,我贴出来了
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
这句

今天还是没弄好

使用特权

评论回复
6
香水城| | 2009-1-5 17:32 | 只看该作者

NVIC?

使用特权

评论回复
7
gucasyu|  楼主 | 2009-1-6 09:33 | 只看该作者

回6楼

NVIC也已配置。
看了香水版主的建议后,看了固件库里的例子
基本配置和例子没有区别,真不知道是怎么回事,今天继续努力,谢谢大家的关注

使用特权

评论回复
8
E精灵小店| | 2009-1-8 01:32 | 只看该作者

我刚做了USART,贴出程序共享一下吧


void Usart_int(void)
{
  USART_InitTypeDef     USART_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

  USART_DeInit(USART1);
  /* ---------------------------------------------------------------
    USART Configuration: 
    FPCLK = 36 MHz, Baud rate =36000,MODE: RX & TX
  --------------------------------------------------------------- */
  USART_InitStructure.USART_BaudRate            = 19200;
  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(USART1, &USART_InitStructure);
  
  /* Enable the USART Receive interrupt: this interrupt is generated when the 
   USART1 receive data register is not empty */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

  /* Enable USART1 */
  USART_Cmd(USART1, ENABLE);
  USART_ClearFlag(USART1,USART_FLAG_TXE);
}
void NVIC_init(void)
 {
  NVIC_InitTypeDef NVIC_InitStructure;

  #ifdef  VECT_TAB_RAM
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  #else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  #endif

// Enable the USART1 gloabal Interrupt
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
  NVIC_Init(&NVIC_InitStructure);
}

_IT.C
void USART1_IRQHandler(void)
{
   if(USART_GetITStatus(USART1,USART_IT_RXNE)!= RESET)
   {
      USART_ClearITPendingBit(USART1, USART_IT_RXNE);

      //接收数据在以下地点加代码
      if(USART_ReceiveData(USART1)==0xaa)
      GPIO_CPLBits(GPIOF,GPIO_Pin_6);
   }
}

使用特权

评论回复
9
E精灵小店| | 2009-1-8 01:59 | 只看该作者

我也是刚花了一天的时间做了例程

   RTC+串口+CB上位机程序的实时通信的一个例子.
基本是通了,不过也有个小问题,不过是RTC的问题.

RTC的ALM闹钟设置成功后好像没保存,而实时时钟就可以.每次复位,实时时钟保留上次的时间,而ALM没有.但我ALM是设置成功了的,因为CB上位机读回来的闹钟时间是我设定的时间,而且闹钟到时,我的中断可以进去,蜂鸣器可以响.所以存在RTC的ALM寄存器复位丢失的问题. 有没有人遇到过这种情况呦!

使用特权

评论回复
10
w75815895| | 2009-1-8 09:15 | 只看该作者

RE楼上

你这种情况我没碰到过。我用C8T6碰到的是复位后实时时钟和ALM同时没有的。想同的程序想同的板换成CBT6可以。本质问题仍没解决

使用特权

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

本版积分规则

6

主题

22

帖子

0

粉丝