STM8 SPI一直停在接收寄存器这里。

2019-07-19 21:06发布

好久没完STM8了,最近需要用到。想用SPI驱动的时候,发现程序一直停留在接收寄存器这里。请大侠帮忙看看。代码如下:
void SPI_Init(void)
{


/* ÏÈ·¢ËÍMSB£»Fmaster/2;½ûÖ¹SPIÉ豸£»Ö÷É豸£»¿ÕÏÐ״̬ʱSCKΪ¸ßµçƽ;
  Êý¾Ý´ÓµÚ¶þ¸öʱÖÓ±ßÑØ¿ªÊ¼²ÉÑù ¡£  */
  SPI_CR1 = (0<<7)|(0<<6)|(0<<3)|(1<<2)|(1<<1)|(1<<0);  
  /*&#209;&#161;&#212;&#241;&#203;&#171;&#207;&#223;&#181;&#165;&#207;ò&#202;&#253;&#190;&#221;&#196;&#163;&#202;&#189;&#163;&#187;CRC&#188;&#198;&#203;&#227;&#189;&#251;&#214;&#185;&#163;&#187;&#207;&#194;&#210;&#187;&#184;&#246;·&#162;&#203;&#205;&#202;&#253;&#190;&#221;&#192;&#180;×&#212;Tx&#187;&#186;&#179;&#229;&#199;&#248;&#163;&#187;
  &#200;&#171;&#203;&#171;&#185;¤;&#202;&#185;&#196;&#220;&#200;í&#188;&#254;&#180;&#211;&#201;è±&#184;&#185;&#220;&#192;í;&#180;&#211;&#201;è±&#184;&#209;&#161;&#212;&#241;&#206;&#170;&#214;÷&#196;&#163;&#202;&#189; */
  SPI_CR2 = (0<<7)|(0<<5)|(0<<4)|(0<<2)|(1<<1)|(1<<0);  
  SPI_ICR = (0<<7)|(0<<6)|(0<<5)|(0<<4);                /* &#189;&#251;&#214;&#185;&#203;ù&#211;&#208;&#214;&#208;&#182;&#207; */
  SPI_CR1 |= (1<<6);                                    /* &#191;&#170;&#198;&#244;SPI&#196;&#163;&#191;é */

  PD_DDR|=BIT(2);   /* &#201;è&#214;&#195D2&#202;&#253;&#190;&#221;·&#189;&#207;ò&#188;&#196;&#180;&#230;&#198;÷ 1&#206;&#170;&#202;&#228;&#179;&#246;&#163;&#172;0&#206;&#170;&#202;&#228;&#200;&#235;--&#178;é&#191;&#180;STM8&#188;&#196;&#180;&#230;&#198;÷.pdf P87 */
  PD_CR1|=BIT(2);   /* &#201;è&#214;&#195;&#205;&#198;&#205;ì&#202;&#228;&#179;&#246;--&#178;é&#191;&#180;STM8&#188;&#196;&#180;&#230;&#198;÷.pdf P88 */
  PD_CR2|=BIT(2);   /* &#201;è&#214;&#195;&#202;&#228;&#179;&#246;&#198;&#181;&#194;&#202; 1&#206;&#170;10M&#163;&#172;0&#206;&#170;2M--&#178;é&#191;&#180;STM8&#188;&#196;&#180;&#230;&#198;÷.pdf P89 */   
  
  PA_DDR|=BIT(3);   /* &#201;è&#214;&#195A3&#202;&#253;&#190;&#221;·&#189;&#207;ò&#188;&#196;&#180;&#230;&#198;÷ 1&#206;&#170;&#202;&#228;&#179;&#246;&#163;&#172;0&#206;&#170;&#202;&#228;&#200;&#235;--&#178;é&#191;&#180;STM8&#188;&#196;&#180;&#230;&#198;÷.pdf P87 */
  PA_CR1|=BIT(3);   /* &#201;è&#214;&#195;&#205;&#198;&#205;ì&#202;&#228;&#179;&#246;--&#178;é&#191;&#180;STM8&#188;&#196;&#180;&#230;&#198;÷.pdf P88 */
  PA_CR2|=BIT(3);   /* &#201;è&#214;&#195;&#202;&#228;&#179;&#246;&#198;&#181;&#194;&#202; 1&#206;&#170;10M&#163;&#172;0&#206;&#170;2M--&#178;é&#191;&#180;STM8&#188;&#196;&#180;&#230;&#198;÷.pdf P89 */   

  SET_SPI_CS;
  SET_RC522RST;
}

u8 SPIWriteByte(u8 Byte)
{
  while((SPI_SR & 0x02)==0);              /* &#181;&#200;&#180;&#253;·&#162;&#203;&#205;&#188;&#196;&#180;&#230;&#198;÷&#206;&#170;&#191;&#213; */
  SPI_DR = Byte;                        /* &#189;&#171;·&#162;&#203;&#205;&#181;&#196;&#202;&#253;&#190;&#221;&#208;&#180;&#181;&#189;&#202;&#253;&#190;&#221;&#188;&#196;&#180;&#230;&#198;÷ */
  while((SPI_SR & 0x01)==0);              /*代码一直停在这里,请大家帮忙看看是什么原因???
  return SPI_DR;                        /* &#182;&#193;&#202;&#253;&#190;&#221;&#188;&#196;&#180;&#230;&#198;÷ */        
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
螃蟹爱虫
1楼-- · 2019-07-19 21:44
结贴。原因已找到,不小心把内部SPI的电源关掉了。
正点原子
2楼-- · 2019-07-19 23:10
 精彩回答 2  元偷偷看……

一周热门 更多>