完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,最近在基于STM32cube库调试spi口,遇到一些问题向大家请教
1.spi发射寄存器是8位的,那么配置成16位的如何一次性发送一个16位的数据呢? AL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) 其中pdata是一个8位数据的指针呀! 2.我在调试过程中,发射数据遇到在第11位,12位恒定输出高电平 如下面输出1时,示波器检测到的数据,蓝色为时钟,黄色为数据 3配置代码是通过CubeMX配置的 void MX_SPI2_Init(void) { hspi2.Instance = SPI2; hspi2.Init.Mode = SPI_MODE_MASTER; hspi2.Init.Direction = SPI_DIRECTION_2LINES; hspi2.Init.DataSize = SPI_DATASIZE_16BIT; hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH; hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; hspi2.Init.NSS = SPI_NSS_SOFT; hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.TIMode = SPI_TIMODE_DISABLED; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; // hspi2.Init.CRCPolynomial = 10; HAL_SPI_Init(&hspi2); } GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Peripheral DMA init*/ hdma_spi2_tx.Instance = DMA1_Channel5; hdma_spi2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_spi2_tx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_spi2_tx.Init.MemInc = DMA_MINC_DISABLE; hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_spi2_tx.Init.Mode = DMA_NORMAL; hdma_spi2_tx.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_spi2_tx); __HAL_LINKDMA(hspi,hdmatx,hdma_spi2_tx); /* Peripheral interrupt init*/ HAL_NVIC_SetPriority(SPI2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(SPI2_IRQn); 4调用代码 if(HAL_SPI_Transmit_IT(&hspi2, (uint8_t*)SPI_aTxBuffer,1) != HAL_OK) { /* Transfer error in transmission process */ Error_Handler(); } while (HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY) { } |
|
相关推荐
9个回答
|
|
小弟新手,先在这里谢谢大家了
|
|
|
|
项一下,待高手来回答
|
|
|
|
帮顶,期待高手进来
|
|
|
|
哇哦0.0 示波器的问题还是0.0 波形有点0.0。。。
|
|
|
|
一方面 spi速度有点高8Mbits,另一方面示波器确实不怎么好的原因
|
|
|
|
还是小弟来自己解答自己问题吧,供大家以后参考
|
|
|
|
1.直接配置16位,调用这个函数,只不过pdata直接指向一个16位的数据就可以输出16位的,非常方便 |
|
|
|
2.是因为pdata指向了一个字符型数据,如uint8_t SPI_aTxBuffer[] = “232”;,应该直接为uint8_t SPI_aTxBuffer[] = {232}; |
|
|
|
强制转换位8位的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1049 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1017 浏览 2 评论
2123 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1219 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1639 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 17:41 , Processed in 0.711648 second(s), Total 60, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号