新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2026-2-9
- 在线时间
- 5 小时
|
1金钱
程序如下,
int main(void)
{
u16 i;
u8 t=0;
u8 j,mask=0;
float pro=0; //进度
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,115200); //串口初始化为115200
delay_init(72); //延时初始化
RCC->AHBENR|=1<<0; //开启DMA1时钟
delay_ms(5); //等待DMA时钟稳定
DMA1_Channel3->CPAR= (u32)&USART1->DR; //DMA1 外设地址
DMA1_Channel3->CMAR=(u32)TEXT_TO_SEND; //DMA1,存储器地址
DMA1_Channel3->CNDTR=sizeof(TEXT_TO_SEND); //DMA1,传输数据量
DMA1_Channel3->CCR=0X0000109E;
SPI1->CR2|=1<<1; //DMA+SPI发送 设备使能
DMA1_Channel3->CCR|=1<<0; //开启DMA传输
MY_NVIC_Init(1,3,DMA1_Channel3_IRQn,2);//抢占1
while(1)
{ delay_ms(1000);
}
}
//============================================================================
void DMA1_Channel3_IRQHandler(void)
{ if(DMA1->ISR&(1<<9)) //传输完成标志
{ DMA1->IFCR|=1<<9;
DMA1_Channel3->CCR&=~(1<<0);
}
if(DMA1->ISR&(1<<10)) //传输半完成标志
{ DMA1->IFCR|=1<<10;
DMA1_Channel3->CCR&=~(1<<2);
}
if(DMA1->ISR&(1<<11)) //传输错误标志
{ DMA1->IFCR|=1<<11;
}
}
//============================================================================
void SPI1_GPIO_Init(void)
{ RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0X000FFFFF;
GPIOA->CRL|=0XBBB00000;
GPIOA->ODR|=7<<5;
RCC->APB2ENR|=1<<12; //使能SPI1时钟
SPI1->CR1=0x0000C315;
SPI1->CR1|=1<<6; //SPI设备使能
}
不能启动DMA ,不知那问题
|
|