初级会员

- 积分
- 105
- 金钱
- 105
- 注册时间
- 2017-8-23
- 在线时间
- 32 小时
|
10金钱
是这样的 我用战舰大容量的STM32F103ZE芯片,用的串口DMA正常,但是当我新建一个STM32F103CBT6工程时,再用串口DMA,没有改变任何有关配置和相关用到的DMA,但是程序是跑死的,最后一步步的检查发现是当配置好DMA后将DMA初始化写入这里就死了,只有屏蔽了 // DMA_Init(DMA_CHx, &DMA_InitStructure);这个才会正常跑。 一个大容量芯片配置改成一个中等容量配置就会死了呢?原子哥到底是啥回事?STM32F103CBT6板子确定能用,已经跑过程序验证了。以下是配置代码:
void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //ʹÄÜDMA´«Êä
DMA_DeInit(DMA_CHx); //½«DMAµÄͨµÀ1¼Ä´æÆ÷ÖØÉèΪȱʡֵ
DMA1_MEM_LEN=cndtr;
DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; //DMAÍâÉè»ùµØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr = cmar; //DMAÄÚ´æ»ùµØÖ·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //Êý¾Ý´«Êä·½Ïò£¬´ÓÍâÉè¶ÁÈ¡·¢Ë͵½ÄÚ´æ
DMA_InitStructure.DMA_BufferSize = cndtr; //DMAͨµÀµÄDMA»º´æµÄ´óС
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //ÍâÉèµØÖ·¼Ä´æÆ÷²»±ä
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //ÄÚ´æµØÖ·¼Ä´æÆ÷µÝÔö
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //Êý¾Ý¿í¶ÈΪ8λ
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //Êý¾Ý¿í¶ÈΪ8λ
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //¹¤×÷ÔÚÕý³£Ä£Ê½
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMAͨµÀ xÓµÓÐÖÐÓÅÏȼ¶
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMAͨµÀxûÓÐÉèÖÃΪÄÚ´æµ½ÄÚ´æ´«Êä
// DMA_Init(DMA_CHx, &DMA_InitStructure); //¸ù¾ÝDMA_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯DMAµÄͨµÀUSART1_Tx_DMA_ChannelËù±êʶµÄ¼Ä´æÆ÷
DMA_ITConfig(DMA_CHx,DMA_CCR5_TCIE,ENABLE);//DMAÍê³ÉÖжÏʹÄÜ
DMA_ITConfig(DMA_CHx,DMA1_IT_TC5,ENABLE);//DMA ch5ÖжÏʹÄÜ
DMA_Cmd(DMA_CHx, ENABLE); //ʹÄÜUSART1 TX DMA1 ËùָʾµÄͨµÀ
}
int main(void)
{
delay_init(); //
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//
uart_init(9600); //
NVIC_DMA_Config();
MYDMA_Config(DMA1_Channel5,(u32)&USART1->DR,(u32)RXBuff,RX_BUF_SIZE);//
USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE); //
MYDMA_Enable(DMA1_Channel5);//
.
.
.
.
}
|
|