找回密码
 立即注册
查看: 352|回复: 2

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

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2025-03-31 16:46:26

2

主题

19

回帖

220

积分

中级会员

积分
220
发表于 2024-7-22 18:16:58 | 显示全部楼层 |阅读模式
以下是: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[i]);
               
                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[i];
                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.

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9138

积分

超级版主

DebugLab

积分
9138
发表于 2024-7-22 18:48:01 | 显示全部楼层
SPI直接用DMA了
有的大佬在自己写库
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2025-06-15 22:44:24
已绑定手机

19

主题

3231

回帖

5281

积分

论坛元老

积分
5281
发表于 2024-7-22 22:14:51 | 显示全部楼层
感觉官方spi库函数好简单,只有初始化、模式、发送一个字节。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 12:55 , Processed in 0.209794 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表