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

基于cube库的SPI口发射问题

[复制链接]
MyGrow 提问时间: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个回答
MyGrow 回答时间:2015-6-12 21:45:18
小弟新手,先在这里谢谢大家了
埃斯提爱慕 回答时间: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。。。
MyGrow 回答时间:2015-6-16 12:05:38

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

1.直接配置16位,调用这个函数,只不过pdata直接指向一个16位的数据就可以输出16位的,非常方便
MyGrow 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版