独风轻扬 发表于 2024-7-22 18:16:58

请问:STC8H1K08的SPI例程怎么改成和STM32库函数差不多的方式

以下是:STM32库函数摘录出来的SPI读写和发送BUF的函数,不知道怎么把STC8H1K08的SPI改成类似一样的?
/******************************************************************************/
u8 SPI1_ReadWriteByte(u8 TxByte)
{
        while( SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);    //当发送buffer为空时(说明上一次数据已复制到移位寄存器中)退出,这时可以往buffer里面写数据
        SPI_SendData8(SPI1,TxByte);

        while( SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);   //当接收buffer为非空时退出
        return SPI_ReceiveData8(SPI1);
}
/******************************************************************************/
void SPI1_SendBuf(u8 *txBuffer, u16 Length)
{
        u16 i;
       
        for(i=0;i<Length;i++)
        {
                while( SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);   //当发送buffer为空时(说明上一次数据已复制到移位寄存器中)退出,这时可以往buffer里面写数据
                SPI_SendData8(SPI1, txBuffer);
               
                while( SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);//当接收buffer为非空时退出
                SPI_ReceiveData8(SPI1);
        }
}
/******************************************************************************/

STC8H1K08的库函数版本是:STC8G-STC8H-LIB-DEMO-CODE-20200918,我在里面找不到SPI函数。
在例程里面有个SPI函数,但是没有类似SPI_ReceiveData8读数据的函数,我直接改成如下:
/******************************************************************************/
u8 SPI_WriteByte(u8 TxData)                //SPI发送一个字节数据
{
        SPSTAT = SPIF + WCOL;        //清0 SPIF和WCOL标志
        SPDAT = TxData;
        B_SPI_Busy = 1;
        while(B_SPI_Busy) ;
        return SPDAT;                          
}
/******************************************************************************/
void SPI_SendBuf(u8 * txBuffer, u16 lenth)
{
        u8 i=0;
       
        for(i=0;i<lenth;i++)
        {
                SPSTAT = SPIF + WCOL;        //清0 SPIF和WCOL标志
                SPDAT = txBuffer;
                B_SPI_Busy = 1;
                while(B_SPI_Busy) ;
        }
}
/******************************************************************************/
void SPI_Transivion (void) interrupt SPI_VECTOR
{
        B_SPI_Busy = 0;
        SPSTAT = SPIF + WCOL;        //清0 SPIF和WCOL标志
}
/******************************************************************************/

程序编译通过,但是没有达到和STM32的功能,原板子用是STM32,想换成STC8.

DebugLab 发表于 2024-7-22 18:48:01

SPI直接用DMA了
有的大佬在自己写库

soma 发表于 2024-7-22 22:14:51

感觉官方spi库函数好简单,只有初始化、模式、发送一个字节。
页: [1]
查看完整版本: 请问:STC8H1K08的SPI例程怎么改成和STM32库函数差不多的方式