你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于cube库的SPI口发射问题

[复制链接]
wgm_2013 提问时间:2015-6-12 21:44 /
大家好,最近在基于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时,示波器检测到的数据,蓝色为时钟,黄色为数据
2.jpg
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 发布时间:2015-6-12 21:44

举报

9个回答
wgm_2013 回答时间:2015-6-12 21:45:18
小弟新手,先在这里谢谢大家了
dsjsjf 回答时间:2015-6-12 23:16:43
项一下,待高手来回答
为什么是EEFOCUS小白 回答时间:2015-6-13 15:08:59
这波形真差
lkl0305 回答时间:2015-6-13 23:23:02
帮顶,期待高手进来
shadow丶 回答时间:2015-6-14 23:07:22
哇哦0.0   示波器的问题还是0.0  波形有点0.0。。。
wgm_2013 回答时间:2015-6-16 12:05:38

一方面 spi速度有点高8Mbits,另一方面示波器确实不怎么好的原因
wgm_2013 回答时间:2015-6-16 12:07:04
还是小弟来自己解答自己问题吧,供大家以后参考
wgm_2013 回答时间:2015-6-16 12:08:41
wgm_2013 发表于 2015-6-16 12:07
还是小弟来自己解答自己问题吧,供大家以后参考

1.直接配置16位,调用这个函数,只不过pdata直接指向一个16位的数据就可以输出16位的,非常方便
wgm_2013 回答时间:2015-6-16 12:10:00
wgm_2013 发表于 2015-6-16 12:08
1.直接配置16位,调用这个函数,只不过pdata直接指向一个16位的数据就可以输出16位的,非常方便 ...

2.是因为pdata指向了一个字符型数据,如uint8_t SPI_aTxBuffer[] = “232”;,应该直接为uint8_t SPI_aTxBuffer[] = {232};  

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版