你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8l051复用SPI功能需要怎么操作

[复制链接]
风-417456 提问时间:2015-5-27 10:19 /
void SPI_Initial( void )
{
          //Set as default
        SPI_DeInit( );
        //Set the priority of the SPI
        SPI_Init();
      //Config the GPIOs for SPI bus
        SPI_GPIO_Init();
}

void SPI_DeInit(void)
{
        SPI1_CR1 = 0x00;       
        SPI1_CR2 = 0x00;
        SPI1_ICR = 0x00;
        SPI1_SR = 0x02;
}

void SPI_Init(void)
{
        SYSCFG_RMPCR1 |= 0x80;        //选择复用SPI接口为PA2,PA3,PC5
       
        SPI1_CR1 = 0x00;        //先发送MSB,波特率000,SCK空闲为低,数据采样第一个时钟边沿开始       
        SPI1_CR2 = 0x03;       
        SPI1_CR1 |= 0x40;        //启动SPI总线
        SPI1_CRCPR = 0x07;
       
        SPI1_CR1 |= 0x40;
}

void SPI_GPIO_Init(void)
{
        PA_DDR |= ~(1<<MISO);
        PA_CR1 |= ~(1<<MISO);
        PA_CR2 |= ~(1<<MISO);        //设置PA2,复用MISO时为悬浮输入
       
        PA_DDR |= (1<<MOSI);
        PA_CR1 |= (1<<MOSI);
        PA_CR2 |= (1<<MOSI);        //设置PA3,复用MOSI时为推挽输出
       
        PC_DDR |= (1<<SCK);
        PC_CR1 |= (1<<SCK);
        PC_CR2 |= (1<<SCK);        //设置PC6,复用SCK时为推挽输出
       
        PC_DDR |= (1<<CSN);
        PC_CR1 |= (1<<CSN);
        PC_CR2 |= (1<<CSN);        //设置PC5,复用CSN时为推挽输出
}
#define MISO 2
#define MOSI 3
#define SCK 6
#define CSN 5

以上是我初始化SPI的程序,参考了官方的例程修改的,但是调试一直通不过,SPI没有输出

收藏 评论7 发布时间:2015-5-27 10:19

举报

7个回答
你好我好大家好! 回答时间:2015-5-27 10:42:19
没用过      
艴小鱼 回答时间:2015-5-27 11:42:29
直接操作寄存器程序可读性不佳啊。。
小小超 回答时间:2015-5-28 08:20:32
在 ST Visual Programmer 选择相应的复用功能即可
风-417456 回答时间:2015-5-28 13:41:00
ts2000 发表于 2015-5-28 08:20
在 ST Visual Programmer 选择相应的复用功能即可

STM8S系列里确实有,可以在STVP里设置,但是STM8L其他的我不知道,但是STM8L051的没有可以设置的选项
黑夜之狼 回答时间:2016-1-11 01:15:53
也碰到这问题,LZ解决了没?
xmshao 回答时间:2016-1-11 13:24:04
时钟跑得起来否?

还有,SPI外设的时钟要手动开启的哦,默认是关闭的。
lmy11224433 回答时间:2018-3-2 15:32:16
我操作的是RC522,while里面一直进行写操作但是也没有SCK时钟,以下是我的初始化操作,有好心人给看一下吗?也帮楼主顶一下!
CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);
    GPIO_Init(GPIOB, GPIO_Pin_4, GPIO_Mode_Out_PP_High_Fast); //NSS片选
    GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast); //SCK
    GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast); //MOSI
    //主机模式,配置为输入  
    GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT); //MISO
   
    BSP1_RFID_PowerOn();        //给RC522芯片上电
    //BSP1_RFID_PowerOff();
   
    SPI_DeInit(SPI1);
    SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_8, SPI_Mode_Master,SPI_CPOL_Low, SPI_CPHA_1Edge,SPI_Direction_2Lines_FullDuplex, SPI_NSS_Soft, 0x07);
    //SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_128, SPI_Mode_Master,SPI_CPOL_High, SPI_CPHA_2Edge,SPI_Direction_2Lines_FullDuplex, SPI_NSS_Soft, 0x07);
    SPI_Cmd(SPI1, ENABLE);  /* 使能SPI */
   
    rv = BSP1_RFID_Reset(&ctrl_reg, &ver_reg);  //和PcdReset库函数一模一样
    printf("ctrl_reg:%02X, ver_reg:%02X\r\n", ctrl_reg, ver_reg);
    if (rv != 0)
    {
        printf("rfid init error\r\n");
    }
    BSP_RFID_AntennaOff();
    delay_ms(1);
    BSP_RFID_AntennaOn();
    BSP_RFID_ConfigISOType('A');        //针对ISO14443A型卡进行初始化
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版