OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 234|回复: 2

dma+spi1 发送问题----------

[复制链接]

2

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2026-2-9
在线时间
5 小时
发表于 6 天前 | 显示全部楼层 |阅读模式
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  ,不知那问题

回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2015-1-4
在线时间
70 小时
发表于 6 天前 | 显示全部楼层
  DMA1_Channel3->CPAR= (u32)&USART1->DR;                  //DMA1 外设地址
这个外设地址是不是不对应该是SPI发送的地址
回复

使用道具 举报

2

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2026-2-9
在线时间
5 小时
 楼主| 发表于 6 天前 | 显示全部楼层
马超飞燕 发表于 2026-2-12 17:27
DMA1_Channel3->CPAR= (u32)&USART1->DR;                  //DMA1 外设地址
这个外设地址是不是不对应 ...

SPI1_GPIO_Inin{)  没加进去

新问题出来。半传输 中断没有反应直到传输完成才中断响应。但相对应标志都产生了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-2-18 13:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表