CH32V103 主机模式NSS片选设置

遇到的问题:我想要设置主模式,用NSS作为片选引脚去控制从机,但是不管我怎么设置,不管是硬件控制还是软件控制,NSS(PA4)都没有信号产生,如何设置才能够使PA4产生片选信号?

SPI初始化程序:

void SPI_FullDuplex_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure = {0};

    SPI_InitTypeDef  SPI_InitStructure = {0};


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_SetBits(GPIOA, GPIO_Pin_4);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA, &GPIO_InitStructure);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOA, &GPIO_InitStructure);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA, &GPIO_InitStructure);




    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;


    SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;

    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;

    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;

    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;

    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;

    SPI_InitStructure.SPI_CRCPolynomial = 0;


    SPI_Init(SPI1, &SPI_InitStructure);


//    SPI_SSOutputCmd(SPI1, ENABLE);


    SPI_Cmd(SPI1, ENABLE);

}



主函数:

    SPI_FullDuplex_Init();

    Delay_Ms(10);



    while(1)

    {

        u8 retry;

        retry = 0;

//        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //等待发送区空

//        {

//            retry++;

//            if(retry>200)return 0;

//        }

        GPIO_ResetBits(GPIOA, GPIO_Pin_4);

        Delay_Us(10);

        SPI_I2S_SendData(SPI1, 1000);

        Delay_Us(100);

        GPIO_SetBits(GPIOA, GPIO_Pin_4);

        Delay_Ms(1000);


你好,按照你的配置(软件片选),片选信号需由自己手动拉高或者拉低,此时GPIO口不可以复用成SPI的片选脚,即GPIO口应配置为普通推挽输出模式(out --pp),同时看你程序将IO口配置成输出模式时,并没有设置速度,不配置速度此时是输入模式。

image.pngimage.png

这个可以参考我们官网EVT中操作spi-flash的例程,下载链接:/downloads/CH32V103EVT_ZIP.html?。如若使用硬件片选,可参考这篇博客:https://www.cnblogs.com/wchmcu/p/17340422.html,后续若有问题,可邮箱(yrl@wch.cn)与我沟通


只有登录才能回复,可以选择微信账号登录