打印
[STM8]

SPI配置主从的时候 一直检测不到时钟信号

[复制链接]
3643|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不知道为何一直检测不到时钟信号,当只有主机运行的时候也检测不到时钟信号,发送端用示波器检测有波形输出,但是时钟信号就没波形输出。请各位大神指点一下
我的主模式下程序:
#include"stm8s105s6.h"
#define uchar unsigned char
#define uint unsigned int
_Bool LED @PD_ODR:0;
_Bool LED2 @PD_ODR:1;
_Bool MOSI @PC_ODR:6;
_Bool MISO @PC_IDR:7;
_Bool SPI_CLK @PC_ODR:5;
_Bool SPI_NSS @PE_IDR:5;

uchar a1,t,b,n,j=0,m=0;
uchar rec_over=0;
uchar UART2_Rx[3]={0,0,0};//接收缓存
uchar SPI_Rx[3]={0,0,0};

void CLK_Init(void);
void GPIO_Init(void);
void UART2_Init(void);
void UART2_SendChar(uint ch);
void delay(uint s);
void SPI(void);
void SPI_SendChar(uint ch);

void CLK_Init(void)
{
        CLK_CKDIVR = 0x00;  //16M晶振
}

void GPIO_Init(void)
        {
        PD_DDR=0x03;
        PD_CR1=0x03;
        PD_CR2=0x00;
        PC_DDR=0x20;
        PC_CR1=0x20;
        PC_CR2=0x00;
        PE_DDR=0x00;//NSS设为上拉输入
        PE_CR1=0x20;
        PE_CR2=0x00;
  }
       
void UART2_Init(void)
{
        UART2_CR1=0x00;
        UART2_CR2=0x00;
        UART2_CR3=0x00;
        UART2_BRR2=0x02;
        UART2_BRR1=0x68;
        UART2_CR2=0x2c;
}

void SPI_SendChar(uint ch)
{
         while((SPI_SR & 0x80)==0x00);
         SPI_DR=ch;
}

void delay(uint s)
   {
       uchar i;
                         for(s;s>0;s--)
       for(i=0;i<100;i++);
   }
         
void SPI(void)
{
        SPI_CR1=0x14;
        SPI_CR2=0x73;
        SPI_ICR=0x80;
        SPI_SR=0x02;
        SPI_CR1=0x54;
//        SPI_DR=0x04;
//        SPI_DR=a;
//        delay(1);
//  while((SPI_SR|0x80)==0x80);
}

void main()
{
           GPIO_Init();
           CLK_Init();
                 UART2_Init();
                 LED2=1;
                 //SPI_CLK=1;
           _asm("rim");
                 while(1)
        {
                        if(m==1)
                    {
                                        //SPI_CLK=1;
                            SPI();
                                        LED2=0;
                          }
                       
        }
}
@far@interrupt void UART2_Recv_IRQHandler(void)
{
        UART2_Rx[j]=UART2_DR;//        UART2_SendChar(UART2_Rx[j]);
                j=j+1;
                        if(j==3)
       {
                    rec_over=1; //接收完一串数据标志
               if(UART2_Rx[0]==0x66)
                      if(UART2_Rx[1]==0x66)
                        if(UART2_Rx[2]==0x01)
                               {
                                                                                        m=1;
                               }
                                /*if(UART2_Rx[0]==0x66)
                                  if(UART2_Rx[1]==0x66)
                                     if(UART2_Rx[2]==0x02)
                               {
                                                                                        m=2;
                               }*/
                                  j=0;
             }
                return;
}

@far @interrupt void SPIQHandler(void)
{
         while((SPI_SR&0x02)==0x02)         
         SPI_DR=0x01;  
  // SPI_CLK=1;
   while((SPI_SR & 0x80)==0x00);
         LED=1;
        // SPI_CLK=0;
}

沙发
airwill| | 2014-5-5 15:40 | 只看该作者
估计 IO 口配置问题, 是不是外设功能禁止了?

使用特权

评论回复
板凳
电气小小晨|  楼主 | 2014-5-5 15:54 | 只看该作者
airwill 发表于 2014-5-5 15:40
估计 IO 口配置问题, 是不是外设功能禁止了?

外设我按照技术手册里说的主模式接高电平,从模式接低电平。不知道配置是否是应该这样的

QQ图片20140505155234.jpg (30.8 KB )

主模式里NSS接高电平

主模式里NSS接高电平

使用特权

评论回复
地板
电气小小晨|  楼主 | 2014-5-5 16:10 | 只看该作者
自己先顶一下,别沉了这贴

使用特权

评论回复
5
电气小小晨|  楼主 | 2014-5-5 16:11 | 只看该作者
还有哪位高手能指点小弟一二的 必感激不尽阿

使用特权

评论回复
6
scott_skl| | 2014-5-5 16:21 | 只看该作者
我也这个原因,顶贴!

使用特权

评论回复
7
电气小小晨|  楼主 | 2014-5-5 16:23 | 只看该作者
scott_skl 发表于 2014-5-5 16:21
我也这个原因,顶贴!

此情可待成追忆 只是当时已惘然。

使用特权

评论回复
8
电气小小晨|  楼主 | 2014-5-5 16:24 | 只看该作者
scott_skl 发表于 2014-5-5 16:21
我也这个原因,顶贴!

此情可待成追忆 只是当时已惘然。

使用特权

评论回复
9
电气小小晨|  楼主 | 2014-5-5 20:28 | 只看该作者
airwill 发表于 2014-5-5 15:40
估计 IO 口配置问题, 是不是外设功能禁止了?

大神,是否是由NSS管脚配置不合理引起的?感觉主机跟从机这两边上,主机用不着配置NSS,从机的NSS脚可以某个用I/O来配置

使用特权

评论回复
10
airwill| | 2014-5-5 22:24 | 只看该作者
设置 MSTR 后, 就成了主机。 可以先屏蔽 NSS 看看。
使用硬件 NSS 后,可能会因为 NSS 引脚信号导致变成从机方式,那么此时就不能发送 SCK 信号咯

使用特权

评论回复
11
电气小小晨|  楼主 | 2014-5-6 09:50 | 只看该作者
airwill 发表于 2014-5-5 22:24
设置 MSTR 后, 就成了主机。 可以先屏蔽 NSS 看看。
使用硬件 NSS 后,可能会因为 NSS 引脚信号导致变成从 ...

昨天想了很久 感觉问题就出在这里。过会再去调试看下:handshake

使用特权

评论回复
12
电气小小晨|  楼主 | 2014-5-6 12:53 | 只看该作者
问题还是存在,不管NSS有没有配置,从机还是接收不到主机的信号。有点无奈,搞得人都要晕了

使用特权

评论回复
13
电气小小晨|  楼主 | 2014-5-6 21:28 | 只看该作者
airwill 发表于 2014-5-5 22:24
设置 MSTR 后, 就成了主机。 可以先屏蔽 NSS 看看。
使用硬件 NSS 后,可能会因为 NSS 引脚信号导致变成从 ...

:victory:错在IO配置上。终于有输出了 我的天。被技术手册迷惑了

使用特权

评论回复
14
waszyaw| | 2014-7-10 11:32 | 只看该作者
:),被技术手册迷惑了。
请分享下。

使用特权

评论回复
15
nbblackdog| | 2015-1-29 08:35 | 只看该作者
分享下楼主

使用特权

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

本版积分规则

7

主题

29

帖子

0

粉丝