打印
[技术问答]

关于SPI发送数据的问题

[复制链接]
2907|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
看了杰发科技AC7811x的SPI外设例程,我认为使用SPI外设只需要初始化SPI,然后调用SPI函数就可以了。但我设置以后通过示波器查看并没有得到我想要的结果(由于硬件对SPI2接口上拉,我示波器显示的波形一直是高电平)并没有发送0,1,2,3,4,5,6,7,恳请各位大佬指点一下!代码如下:
#define length (8)
uint16_t SendBuffer[length] = {0,1,2,3,4,5,6,7}
uint16_t ReceiveBuffer[length] = {0}
void SPI2_INIT(void)
{
    SPI_ConfigType spiConfig = {0};
    /*复用引脚功能*/
    GPIO_SetFunc(SPI2_CS_PIN,   GPIO_FUNC_1);
    GPIO_SetFunc(SPI2_SCK_PIN,  GPIO_FUNC_1);
    GPIO_SetFunc(SPI2_MISO_PIN, GPIO_FUNC_1);
    GPIO_SetFunc(SPI2_MOSI_PIN, GPIO_FUNC_1);
    /*初始化SPI模块*/
    spiConfig.setting.master = ENABLE;//主机模式
    spiConfig.setting.intEn  = DISABLE;//禁用中断
    spiConfig.setting.spiEn  = ENABLE;//Spi使能
    spiConfig.setting.txMsbFirst = ENABLE;//主机MSB先行
    spiConfig.setting.rxMsbFirst = ENABLE;//从机MSB先行
    spiConfig.setting.csOutputEn = ENABLE;//使能SPI模块控制CS
    spiConfig.setting.continuousCSEn = ENABLE;
    spiConfig.setting.frmSize = 7;
    spiConfig.setting.cpha   = 1;//在第二个边沿锁定数据
    spiConfig.setting.cpol   = 1;//空闲时为高电平
    spiConfig.sckHigh        = 23;//波特率: Fscl = Fbclk / ((SCK_LOW + 1) + (SCK_HIGH + 1)).
    spiConfig.sckLow         = 23;//配置波特率为4M.
    //初始化SPI
    SPI_Initialize(SPI2, &spiConfig);
}

int main()
{
    SPI2_INIT();
    SPI_TransferPoll(SPI2,SendBuffer,ReceiveBuffer,length);
    while(1)
    {

    }
}

关于下面这个语句我的理解是:在发送数据MCU会自动下拉片选引脚不用收到添加代码实现片选引脚下拉,不知道理解的对不对请各位谈一下。
spiConfig.setting.csOutputEn = ENABLE;//使能SPI模块控制CS
我的代码还需要添加一些什么代码才能发送数据呢?请各位大佬指正?
感谢感谢


231861935edda9f6e.png (294.72 KB )

231861935edda9f6e.png

使用特权

评论回复

相关帖子

沙发
yubing823| | 2021-12-3 16:05 | 只看该作者
代码看来没啥问题。

使用特权

评论回复
板凳
weifeng90| | 2021-12-5 15:42 | 只看该作者
调试一下才知道

使用特权

评论回复
地板
chenjun89| | 2021-12-6 08:14 | 只看该作者
SPI时钟初始化没

使用特权

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

本版积分规则

2

主题

3

帖子

1

粉丝