新手上路
- 积分
- 49
- 金钱
- 49
- 注册时间
- 2018-12-24
- 在线时间
- 33 小时
|

楼主 |
发表于 2020-8-11 11:11:50
|
显示全部楼层
/*通过DMA发送原始数据*/
void uartslkSendDataDmaBlocking(u32 size, u8* data)
{
if (isUartDmaInitialized)
{
xSemaphoreTake(uartBusy, portMAX_DELAY);
while(DMA_GetCmdStatus(UARTSLK_DMA_STREAM) != DISABLE); /*等待DMA空闲*/
memcpy(dmaBuffer, data, size); /*复制数据到DMA缓冲区*/
DMA_InitStructure.DMA_BufferSize = size;
initialDMACount = size;
DMA_Init(UARTSLK_DMA_STREAM, &DMA_InitStructure); /*重新初始化DMA数据流*/
DMA_ITConfig(UARTSLK_DMA_STREAM, DMA_IT_TC, ENABLE);/*开启DMA传输完成中断*/
USART_DMACmd(UARTSLK_TYPE, USART_DMAReq_Tx, ENABLE);/* 使能USART DMA TX请求 */
USART_ClearFlag(UARTSLK_TYPE, USART_FLAG_TC); /* 清除传输完成中断标志位 */
DMA_Cmd(UARTSLK_DMA_STREAM, ENABLE); /* 使能DMA USART TX数据流 */
xSemaphoreTake(waitUntilSendDone, portMAX_DELAY);
xSemaphoreGive(uartBusy);
}
}
|
|