资深版主
 
- 积分
- 11751
- 金钱
- 11751
- 注册时间
- 2014-4-1
- 在线时间
- 1356 小时
|
1金钱
GD32F470VGT6,把 TxBuf 数组的数据用 DMA1 发送到 USART5 。
以最新的官方库为基础,做了最简化的 IAR 工程。不开任何中断,纯查询方式。
查手册,要使用通道 7(DMA_CH7),申请 DMA 的外设号码是 5 ( DMA_SUBPERI5 )。
使能 DMA1,运行后报 TAEIF7 错误,通道7传输错误,一个字节也没有发出。
仔细查过配置,甚至把寄存器的数值与手册一一对照,没有发现问题。
换了三块电路板,问题都一样。
搞了好几天,一直没有成功。
请官方技术客服看过,同样没有发现问题。
//---------------------------------------------//
( USART5 的配置不是重点,略过。串口用硬件测试过,收发都没问题。)
usart_dma_transmit_config( USART5, USART_TRANSMIT_DMA_ENABLE );
//---------------------------------------------//
rcu_periph_clock_enable( RCU_DMA1 );
dma_deinit( DMA1, DMA_CH7 );
dma_init_struct.direction = DMA_MEMORY_TO_PERIPH;
dma_init_struct.memory0_addr = (uint32_t)TxBuf;
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.periph_addr = ( uint32_t )&USART_DATA( USART5 );
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_8BIT;
dma_init_struct.number = 10;
dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
dma_single_data_mode_init( DMA1, DMA_CH7, &dma_init_struct );
dma_circulation_disable( DMA1, DMA_CH7 );
dma_channel_subperipheral_select( DMA1, DMA_CH7, DMA_SUBPERI5 );
//---------------------------------------------//
dma_channel_enable( DMA1, DMA_CH7 ); //enable DMA channel7
usart_enable( USART5 );
while ( dma_flag_get( DMA1, DMA_CH7, DMA_FLAG_FTF ) == RESET );
while ( 1 );
//---------------------------------------------//
有人遇到过吗?
|
|