打印
[STM8]

STM8L152 硬件SPI的问题

[复制链接]
7531|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
johnsonz99|  楼主 | 2012-6-18 08:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最经使用STM8L152的硬件SPI连接无线模块。SPI的就是不能工作。CLK没有时钟输出。我打开了SPI的外围的时钟,也选着了映射到我要的脚位,就是没有CLK输出。
沙发
qianguiyi| | 2012-6-18 10:24 | 只看该作者
void SPI_Config(void)
{
        disableInterrupts();
        PB_DDR |= 1 << 5;                //SCK
        PB_CR1 |= 1 << 5;                //output

        PB_DDR |= 1 << 6;                //MOSI
        PB_CR1 |= 1 << 6;                //output

        PB_DDR &= ~(1 << 7);        //MISO
        PB_CR1 |= 1 << 7;                //in put with pull-up
       
        CLK_PCKENR1 |= 0x10;
        SPI1_CR1  = 0x04;       
        SPI1_CR2 = 0x03;
        SPI1_CRCPR = 0x07;
        SPI1_ICR         = 0x00;
        SPI1_CR1 |= 0x40;
        enableInterrupts();
}


UINT8 SPI_RW(UINT8 byte)
{
        unsigned char data;
        //while(SPI1_SR&0x80); //Busy flag
        while(!SPI1_SR&0x02);
        SPI1_DR = byte;
        while(!SPI1_SR&0x01);
        _asm("nop");
        _asm("nop");
        _asm("nop");
        _asm("nop");
        data = SPI1_DR;
        return(data);
}
不知道你要的是库函数的驱动还是直接寄存器操作,这是我的SPI设置及读写函数,你参考试试

使用特权

评论回复
板凳
bester| | 2012-11-5 11:17 | 只看该作者
楼主问题解决了吗

使用特权

评论回复
地板
mcukljy| | 2013-6-15 11:18 | 只看该作者
我也遇到同样的问题,用的库函数,不好使,没有CLK信号,不知为何

使用特权

评论回复
5
mcukljy| | 2013-6-15 15:17 | 只看该作者
在2楼软件的基础上改了改,连上了,数据对不对还不知道,继续调试!

使用特权

评论回复
6
mcukljy| | 2013-6-15 15:20 | 只看该作者
可能主要是初始化问题,分享一下我的初始化代码,供大家参考,有兴趣的可以加我的QQ(553953865)一起聊。

void SPI_Config(void)
{
  /* Init I/O ports */
  disableInterrupts();
  GPIO_Init( SI4432SDN_GPIO_PORT, SI4432SDN_GPIO_PIN, GPIO_Mode_Out_PP_High_Slow  );     // SDN PB2
  GPIO_Init( SI4432nSEL_GPIO_PORT, SI4432nSEL_GPIO_PIN, GPIO_Mode_Out_PP_High_Slow  );   // SDN PB4
  GPIO_Init( SI4432SCLK_GPIO_PORT, SI4432SCLK_GPIO_PIN, GPIO_Mode_Out_PP_High_Fast );    // SCLK PB5
  GPIO_Init( SI4432SDI_GPIO_PORT, SI4432SDI_GPIO_PIN, GPIO_Mode_In_FL_No_IT  );          // SDI PB6
  GPIO_Init( SI4432SDO_GPIO_PORT, SI4432SDO_GPIO_PIN, GPIO_Mode_Out_PP_High_Fast );          // SDO PB7
   /* Init 时钟及配置 */      
  CLK->PCKENR1 |= 0x10;           // 时钟允许
  SPI_DeInit(SPI1);
  SPI_Init(SPI1,SPI_FirstBit_MSB,SPI_BaudRatePrescaler_2,SPI_Mode_Master,SPI_CPOL_Low,SPI_CPHA_1Edge,SPI_Direction_1Line_Tx ,SPI_NSS_Soft,TRUE);
  SPI1->CRCPR = 0x07;
  SPI1->CR1 |= 0x40;             // SPI 使能
  enableInterrupts();
}

使用特权

评论回复
7
GERALDWONG| | 2013-12-17 13:30 | 只看该作者
qianguiyi 发表于 2012-6-18 10:24
void SPI_Config(void)
{
        disableInterrupts();

有库函数的吗???

使用特权

评论回复
8
zhuotianhong| | 2013-12-25 08:49 | 只看该作者
GERALDWONG 发表于 2013-12-17 13:30
有库函数的吗???

请问你解决了么?求教

使用特权

评论回复
9
crazy2012| | 2013-12-25 09:09 | 只看该作者
楼主L152的功耗怎么样。和MSP430相比。

使用特权

评论回复
10
budonglene| | 2013-12-25 14:04 | 只看该作者
crazy2012 发表于 2013-12-25 09:09
楼主L152的功耗怎么样。和MSP430相比。

差不多吧,但是stm8l强大些,

使用特权

评论回复
11
zhuotianhong| | 2013-12-26 09:43 | 只看该作者
budonglene 发表于 2013-12-25 14:04
差不多吧,但是stm8l强大些,

请问有相关的源码么?能共享下吗?

使用特权

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

本版积分规则

8

主题

308

帖子

3

粉丝