打印
[STM32]

STM8S003F3 SPI为何通讯不了 CLK没有波形

[复制链接]
5226|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fjqzlonger|  楼主 | 2014-1-2 17:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


void SPI_int(void)
{
      SPI_CR1_SPE = 0;
      SPI_CR1_LSBFIRST = 0;    /*  高位优先 */
      SPI_CR1_BR = 0x02;        /*  1/8 Fmcu    2HMz */
      SPI_CR1_MSTR = 1;         /* 主模式 */
      SPI_CR1_CPOL = 0;        /*  空闲时SCK保持低电平  */
      SPI_CR1_CPHA = 0;      /*  数据采样从第一时钟跳变开始*/
      SPI_CR2 = 0x00;     
      SPI_SR = 0x02;
//---------------------- SPI 端口初始化
      PA_DDR_DDR3 = 1;  /* PA3  输出模式 */  
      PA_CR1_C13 = 1;  /* 推免输出*/
      PA_CR2_C23 = 0;    /*  2MHz  */
      SPI_CS_HIGH();
          
      PC_DDR_DDR7 = 0;  /* PC7  输入模式 */  
      PC_CR1_C17 = 1;  /* 带上拉电阻输入 */
      PC_CR2_C27 = 0;    /*  禁止外部中断  */
          
      PC_DDR_DDR6 = 1;  /* PC6  输出模式 */  
      PC_CR1_C16 = 1;  /* 推免输出*/
      PC_CR2_C26 = 0;    /*  2MHz  */          
          
      PC_DDR_DDR5= 1;  /* PC5  输出模式 */  
      PC_CR1_C15 = 1;  /* 推免输出*/
      PC_CR2_C25 = 0;    /*  2MHz  */          
}


void SPI_WriteByte(unsigned char Data)
{
      SPI_DR = Data;
      while ( !(SPI_SR_TXE));
      while(SPI_SR_BSY);
}

void SPI_Write(unsigned int Wadd, unsigned int data)
{     
      SPI_CS_LOW();
      Wadd &= 0x7FFF;
  
      UART_sendbyte(0xF1);          
      SPI_WriteByte(Wadd>>8);  
      UART_sendbyte(0xF2);
      SPI_WriteByte(Wadd&0xFF);
      UART_sendbyte(0xF3);
      SPI_WriteByte(data>>8);
      UART_sendbyte(0xF4);
      SPI_WriteByte(data&0xFF);
          
      SPI_CS_HIGH();
}

unsigned int SPI_Read(unsigned int Radd)
{
      unsigned char DataL=0,DataH=0;
      unsigned int ReadData=0;

      SPI_CS_LOW();

      Nop();
      Radd |= 0x8000;
          
      SPI_WriteByte(Radd>>8);  
      UART_sendbyte(0x01);
      Nop();

      SPI_WriteByte(Radd&0xFF);
      UART_sendbyte(0x02);
      Nop();

      while(!(SPI_SR_RXNE));
      DataH= SPI_DR;
      UART_sendbyte(0x03);
      while(!(SPI_SR_RXNE));
      DataL=SPI_DR;
      UART_sendbyte(0x04);

      ReadData =((DataH<<8)|DataL);

      SPI_CS_HIGH();

      return ReadData;
}

相关帖子

沙发
hustmingtian| | 2014-1-2 17:46 | 只看该作者
这样贴程序是没有几个人有耐心看下去的,你看看这个文档,这里面的文档很全面,   http://pan.baidu.com/s/1d5VND 实在不成就问问他们的技术群,祝你好运。

使用特权

评论回复
板凳
BitFu| | 2014-1-2 18:04 | 只看该作者
CR2一定要设置成0x03;
硬件SPI的端口貌似无需初始化。
参考一下我的程序吧:
void spi_init(void)
{
        SPI->CR1=SPI_CR1_SPE|/*SPI_CR1_CPHA|SPI_CR1_CPOL|*/SPI_CR1_MSTR|(3<<3); //16分频
        SPI->CR2=SPI_CR2_SSM|SPI_CR2_SSI; //软件模式控制使能引脚
        //SPI->CR1|=SPI_CR1_SPE;//SPI开启
}

uint8_t spi_rw_byte(uint8_t dat)
{
        while(!(SPI->SR & SPI_SR_TXE));
        SPI->DR=dat;
        while(!(SPI->SR&SPI_SR_RXNE));
        return SPI->DR;
}

使用特权

评论回复
地板
NE5532| | 2014-1-2 23:03 | 只看该作者
仿真里面打断点,用watch功能看一下,相关寄存器的值是不是真的写进去了,一些近代单片机有功能模块的时钟控制功能,不开时钟是写不进去的,还有就是参考数据手册上初始化的顺序,ST的资料是写得很恶心,但是一些流程还是列出来了的。

使用特权

评论回复
5
fjqzlonger|  楼主 | 2014-1-3 12:56 | 只看该作者
主机模式 双线单向通讯  为啥SPI_SR_MODF 一直置1  模式错误?

使用特权

评论回复
6
fjqzlonger|  楼主 | 2014-1-3 15:59 | 只看该作者
将NSS由软件管理 SSM SSI置1   空出来PA3 IO口用来输出低电平使能从机     但是SCLK为什么没有输出时钟波形?CLK还需要怎么配置吗? 求大神指点

使用特权

评论回复
7
旭日东起| | 2014-1-3 16:21 | 只看该作者
都是寄存器设置的问题,多参考一下别人的程序就可以了

使用特权

评论回复
8
z755924843| | 2014-1-3 16:53 | 只看该作者
在网上找一个某一款开发板的历程 然后照着他们的改,或者是对比一下。

使用特权

评论回复
9
菜鸟同学| | 2014-1-3 22:21 | 只看该作者
你的头文件对吗?

使用特权

评论回复
10
fjqzlonger|  楼主 | 2014-1-6 10:06 | 只看该作者
#include "iostm8s003f3.h"
用的是IAR for STM8   V1.41版本的    UART 和定时器都能用  就是SPI功能没有开启  为什么?

使用特权

评论回复
11
fjqzlonger|  楼主 | 2014-1-7 11:08 | 只看该作者
没DX指点下吗  STM8S003F3 内置SPI模块 不能用?  默默模拟IO驱动SPI。。。。。

使用特权

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

本版积分规则

1

主题

5

帖子

0

粉丝