OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3844|回复: 4

STM32H743spi口无法直接发送16bit数

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-5-21
在线时间
4 小时
发表于 2021-10-6 22:13:07 | 显示全部楼层 |阅读模式


直接使用原子的例程“NRF24L01无线通信实验”SPI1直接收发8bit数据正常,在保持其他不变的情况下,修改DataSize为16bit以后spi口就无法发送数据。请各位大神帮忙分析原因,倒腾了两天了不知是什么原因!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-5-21
在线时间
4 小时
 楼主| 发表于 2021-10-8 11:03:39 | 显示全部楼层
        /* check TXE flag */
        while((AD7616SPI->SR & SPI_FLAG_TXE) != SPI_FLAG_TXE);                //等待发送区空
        {
                *((__IO uint16_t *)&AD7616SPI->TXDR) = TxData;
        }
这样不会启动发送!

        /* check TXE flag */
        while((AD7616SPI->SR & SPI_FLAG_TXE) != SPI_FLAG_TXE);                //等待发送区空
        {
                *((__IO uint8_t *)&AD7616SPI->TXDR) = TxData;
               
        }
        这样会启动发送!
       有哪位大神碰到过这个问题?
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-5-21
在线时间
4 小时
 楼主| 发表于 2021-10-8 11:04:59 | 显示全部楼层
本帖最后由 jashonlee 于 2021-10-9 20:43 编辑

哦对了,初始化过程:
        SPIAD7616_Handler.Instance=AD7616SPI;                                                  
        SPIAD7616_Handler.Init.Mode=SPI_MODE_MASTER;                          //设置SPI工作模式,设置为主模式
        SPIAD7616_Handler.Init.Direction=SPI_DIRECTION_2LINES;         //设置SPI单向或者双向的数据模式:SPI设置为双线模式
        SPIAD7616_Handler.Init.DataSize=SPI_DATASIZE_16BIT;           //设置SPI的数据大小:SPI发送接收8位帧结构
        SPIAD7616_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH;        
        SPIAD7616_Handler.Init.CLKPhase=SPI_PHASE_1EDGE;                  //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
        SPIAD7616_Handler.Init.NSS=SPI_NSS_SOFT;                                  //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制

        SPIAD7616_Handler.Init.NSSPMode=SPI_NSS_PULSE_DISABLE;//NSS信号脉冲失能
        SPIAD7616_Handler.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;

        SPIAD7616_Handler.Init.IOSwap = SPI_IO_SWAP_DISABLE;//SPI_IO_SWAP_ENABLE;
        SPIAD7616_Handler.Init.MasterInterDataIdleness = SPI_MASTER_SS_IDLENESS_01CYCLE;
        SPIAD7616_Handler.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;

        SPIAD7616_Handler.Init.MasterKeepIOState=SPI_MASTER_KEEP_IO_STATE_ENABLE;  //SPI主模式IO状态保持使能
        SPIAD7616_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//定义波特率预分频的值:波特率预分频值为256
        SPIAD7616_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB;                  //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
        SPIAD7616_Handler.Init.TIMode=SPI_TIMODE_DISABLE;                  //关闭TI模式
        SPIAD7616_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//关闭硬件CRC校验
        SPIAD7616_Handler.Init.CRCPolynomial=7;                           //CRC值计算的多项式
        SPIAD7616_Handler.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;

        SPIAD7616_Handler.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
        SPIAD7616_Handler.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
        SPIAD7616_Handler.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
        
        HAL_SPI_Init(&SPIAD7616_Handler);//初始化

        __HAL_SPI_ENABLE(&SPIAD7616_Handler);                                          //使能SPI

        SPIx_SetSpeed(&SPIAD7616_Handler,SPI_BAUDRATEPRESCALER_4);          // 100/4=25M
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-5-21
在线时间
4 小时
 楼主| 发表于 2021-10-9 20:40:38 | 显示全部楼层
终于查出问题了:
问题出在初始化完以后的波特率调整过程了,感觉是stm32h743spi口初始化结束以后不可以在修改部分配置寄存器。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-5-21
在线时间
4 小时
 楼主| 发表于 2021-10-9 20:41:39 | 显示全部楼层

void SPIx_SetSpeed(SPI_HandleTypeDef *hspi,uint32 SPI_BaudRatePrescaler)
{
        assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//判断有效性
        __HAL_SPI_DISABLE(hspi);                   //关闭SPI
    hspi->Instance->CFG1&=~(0X7<<28);          //位28-30清零,用来设置波特率
        hspi->Instance->CFG1|=SPI_BaudRatePrescaler;//设置SPI速度
        __HAL_SPI_ENABLE(hspi);                           //使能SPI
       
}
波特率修改函数如上,没有看出来函数本身有什么问题。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 19:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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