打印
[STM32]

STM8S105 SPI从机接收中断

[复制链接]
1799|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qq583678156|  楼主 | 2017-6-29 22:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qq583678156 于 2017-6-29 23:07 编辑

我用stm8s105作为spi从机,初始化spi参数如下
void SPI_IO_Init()
{
  //SCK initial
  PC_DDR_bit.DDR5 =0;
  PC_CR1_bit.C15 =0;
  PC_CR2_bit.C25 =0;
  //MOSI initial
  PC_DDR_bit.DDR6 =0;
  PC_CR1_bit.C16 =0;
  PC_CR2_bit.C26 =0;
  //MISO initial
  PC_DDR_bit.DDR7 =1;
  PC_CR1_bit.C17 =1;
  PC_CR2_bit.C27 =1;
}
void SPI_initial()
{
  SPI_CR1_bit.SPE = 1;    //禁止SPI设备
//  SPI_CR1_bit.BR = 1;     //设置SPI速率  /4;
  SPI_CR1_bit.CPOL = 0;   
  SPI_CR1_bit.CPHA = 0;
  SPI_CR1_bit.LSBFIRST = 0;   //先发送MSB
  SPI_CR2_bit.SSM = 1;
  SPI_CR2_bit.SSI = 0;         //主设备 SSI引脚不用
  SPI_CR1_bit.MSTR = 0;
  SPI_CR1_bit.SPE = 1;
  
}
我在main函数里能够查询到spi接收的数据,但是用SPI中断,就是不能触发,还请帮忙看下,程序如下

void main()
{
  data=0;
  CLKInit();
  UART_IO_Init();
  UART_Init(9600);
  SPI_IO_Init();
  SPI_ICR_bit.RXIE = 1;
  SPI_initial();
  
  asm ("sim");
  while(1)
  {
    ;
  }
}

/**     SPI 中断服务函数       */
#pragma vector = 10
__interrupt void SPI_IRQHandler(void)
{
  Uart_SendData(0x08);
  if(SPI_SR_bit.RXNE==1)
  {
    Uart_SendData(99);
    data = SPI_DR;
    Uart_SendData(data);
    SPI_SR_bit.RXNE=0;;
  }
}
请问大侠们帮忙看看如何才能进行中断,另外有个问题就是,在main函数里查询的话,如果没有收到主机的数据,一样能够置位RXNE,查询到的SPI-DR都是00.
重点是中断不能进入,请问这个怎么回事???

相关帖子

沙发
qq583678156|  楼主 | 2017-6-30 09:09 | 只看该作者
stm8s105和stm8s103操作一样的,使用过stm8s103也是一样的,求解答

使用特权

评论回复
板凳
hqpcb5| | 2017-6-30 13:53 | 只看该作者
深圳方达电路,提供一站式的pcb制版加工,提供专业的技术服务,高质量的产品以及高效率的配合!
公司已经通过IS09001:2008国际质量体系认证,(认证编号:No:04613Q11203R0S)和美国UL认证(E361831)。
主要生产1-24层FR4、金属基材(铝基、铜基)、高频类线路板
欢迎前来咨询了解合作,联系电话:13632940353  E-mail:19328471@qq.com

使用特权

评论回复
地板
qq583678156|  楼主 | 2017-7-1 10:25 | 只看该作者
怎么没人回答呢??求大神们帮忙看看问题在哪。上面中断号写错了,实际用的是12不是10,但是都进不去中断

使用特权

评论回复
5
fengfeng的恒| | 2017-7-7 09:44 | 只看该作者
设置SPI为从机,开中断接收数据,用NSS这个引脚,接到主机的片选上,保证两边的时序一样就可以了。前不久还用STM8做了这个。

使用特权

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

本版积分规则

12

主题

54

帖子

0

粉丝