drepa
获得 178 次赞
帮助过993人
如题,我们知道STM32串口一般只能发送单个字符和字符串,即putchar()和printf(),而在工业上,字符串的应用是最少的,应用最多的串口格式是HEX格式,即一个发送一个介于0x00-0xFF的八位字符,那么,STM32的串口是如何发送HEX字符的呢?比如要发送0x30、0xaa和0xff,像串口助手那样是发送1.0x30 0xaa 0xff还是2.0x30 0x20(空格) 0xaa 0x20(空格) 0xff还是3.0x33('3') 0x30('0') 0x61('a') 0x61('a') 0x66('f') 0x66('f')呢?
void SPI1_Init(){ __HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);__HAL_RCC_SPI1_CLK_ENABLE();SPI1_Handler.Instance = SPI1; SPI1_Handler.Init.Mode = SPI_MODE_MASTER;//SPI主模式 SPI1_Handler.Init.Direction = SPI_DIRECTION_2LINES;//SPI双线模式 SPI1_Handler.Init.DataSize = SPI_DATASIZE_8BIT;//8位帧模式 SPI1_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH;//空闲时为高电平 SPI1_Handler.Init.CLKPhase = SPI_PHASE_2EDGE;//第二个跳变沿开始采样 SPI1_Handler.Init.NSS = SPI_NSS_SOFT;//内部NSS信号由软件控制 SPI1_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//2分频 SPI1_Handler.Init.FirstBit = SPI_FIRSTBIT_MSB;//数据传输由高位开始 SPI1_Handler.Init.TIMode = SPI_TIMODE_DISABLE;//关闭TI模式__HAL_SPI_ENABLE(&SPI1_Handler); HAL_SPI_Init(&SPI1_Handler); SPI1_ReadWriteByte(0xff); __HAL_RCC_DMA2_CLK_ENABLE();DMA2_SPI1_RX.Instance = DMA2_Channel3;DMA2_SPI1_RX.Init.Request = DMA_REQUEST_4;DMA2_SPI1_RX.Init.Direction = DMA_PERIPH_TO_MEMORY; DMA2_SPI1_RX.Init.PeriphInc = DMA_PINC_DISABLE; DMA2_SPI1_RX.Init.MemInc = DMA_MINC_ENABLE; DMA2_SPI1_RX.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; DMA2_SPI1_RX.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; DMA2_SPI1_RX.Init.Mode = DMA_CIRCULAR; DMA2_SPI1_RX.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&DMA2_SPI1_RX);__HAL_LINKDMA(&SPI1_Handler,hdmarx,DMA2_SPI1_RX);DMA2_SPI1_TX.Instance = DMA2_Channel4; DMA2_SPI1_TX.Init.Request = DMA_REQUEST_4; DMA2_SPI1_TX.Init.Direction = DMA_MEMORY_TO_PERIPH; DMA2_SPI1_TX.Init.PeriphInc = DMA_PINC_DISABLE; DMA2_SPI1_TX.Init.MemInc = DMA_MINC_ENABLE; DMA2_SPI1_TX.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; DMA2_SPI1_TX.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; DMA2_SPI1_TX.Init.Mode = DMA_CIRCULAR; DMA2_SPI1_TX.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&DMA2_SPI1_TX); __HAL_LINKDMA(&SPI1_Handler,hdmatx,DMA2_SPI1_TX);}如题,使用SPI1挂载DMA,HAL_SPI_Transmit()函数能用,但是HAL_SPI_Transmit_DMA()函数却不能用,这是什么情况?