打印

STM32中断的怪异现象。

[复制链接]
2421|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
azurysky|  楼主 | 2012-4-17 15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果按照下面程序设置时,SPI可以正常发送数据,持续进入中断。
但是如果去掉对TIM4的中断优先级的设置,SPI中断只能进入一次。之后再不能竟如中断(TIM4中断没有使能)。
如果将TIM4的中断优先级仍然分别设置为 0,2将SPI的设置为1,0 SPI也不能正常进入中断。

中断优先级的设置有什么特殊的要求吗?请遇到类似情况的帮忙解答。


程序如下。

void SPI1_IRQHandler(void)
{
  if(SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_TXE)==SET)
  {

       SPI1->DR=0x0001;  //中断中只不断发数据
  }     
}
void spi_init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
   

  SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;  //设置SPI工作模式:设置为从SPI
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;  //设置SPI的数据大小:SPI发送接收16位帧结构
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;  //选择了串行时钟的稳态:时钟悬空低
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据捕获于第二个时钟沿

  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;  //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
  SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Reset);

  SPI_Init(SPI1, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
  SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE, ENABLE);
  SPI_Cmd(SPI1, ENABLE); //使能SPI外设 // SPI1->CR1 |= (u16)0x0040;
  SPI_I2S_SendData(SPI1, 0x0);
}
void NVIC_Configuration(void)
{
   NVIC_InitTypeDef NVIC_InitStructure;
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
   
  /* Enable the TIM4 global Interrupt DISABLE,ENABLE*/
  
  NVIC_InitStructure.NVIC_IRQChannel=TIM1_CC_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0 ;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  
  /* Enable the SPI global Interrupt DISABLE,ENABLE*/
   
  NVIC_InitStructure.NVIC_IRQChannel=SPI1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
沙发
lut1lut| | 2012-4-17 15:34 | 只看该作者
你一个主题,干嘛发两个帖子。

使用特权

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

本版积分规则

32

主题

82

帖子

2

粉丝