|
楼主 |
发表于 2021-5-6 13:59:42
|
显示全部楼层
ALIGN_32BYTES(uint16_t *p) = NULL;
DMA_HandleTypeDef DmaHandle = {0}; /* DMA句柄 */
void main ()
{
/* Enable I-Cache */
SCB_EnableICache();
/* Enable D-Cache */
SCB_EnableDCache();
/* HAL初始化 */
HAL_Init();
/* 时钟初始化 */
SystemClock_Config();
DMA_Init();
p = (uint16_t *)malloc(10);
HAL_DMA_Start(&DmaHandle,GPIOH_BASE,p,3);
while(1)
{
SCB_CleanDCache_by_Addr((uint32_t *) p, 10);
for(uint8_t i = 0; i < 5; i++)
{
printf("%x\r\n",p);
}
HAL_Delay(10);
}
}
void DMA_Init(void)
{
DmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
DmaHandle.Init.MemDataAlignment = DMA_PDATAALIGN_HALFWORD;
DmaHandle.Instance = DMA1_Stream0;
DmaHandle.Init.Request = DMA_REQUEST_TIM1_TRIG;
DmaHandle.Init.Direction = DMA_PERIPH_TO_MEMORY;
DmaHandle.Init.PeriphInc = DMA_PINC_DISABLE;
DmaHandle.Init.MemInc = DMA_MINC_ENABLE;
DmaHandle.Init.Mode = DMA_CIRCULAR;
DmaHandle.Init.Priority = DMA_PRIORITY_VERY_HIGH;
DmaHandle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
Assert (HAL_DMA_Init(&DmaHandle) != HAL_OK);
__HAL_LINKDMA(&TimHandle,hdma[TIM_DMA_ID_TRIGGER],DmaHandle);
}
DMA配置和主函数测试代码如上。硬件会有方波作为触发源,触发DMA传输。 |
|