新手上路
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2020-3-24
- 在线时间
- 13 小时
|

楼主 |
发表于 2020-3-27 10:10:54
|
显示全部楼层
- void SPI_Configuration(void)
- {
- RCC->AHB4ENR|=1<<4; //使能PORTE时钟
- RCC->APB2ENR|=1<<13; //使能SPI4时钟
-
- RCC->AHB1ENR|=1<<0; //DMA1时钟使能
- // RCC->D3AMR|=1<<0; //DMAMUX时钟使能
-
- GPIO_Set(GPIOE,PIN2,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PD); //PE2 SCK 复用推挽输出
- GPIO_Set(GPIOE,PIN6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PD); //PE6 MOSI 复用推挽输出
- GPIO_Set(GPIOE,PIN5,GPIO_MODE_AF,GPIO_OTYPE_OD,GPIO_SPEED_HIGH,GPIO_PUPD_PU); //PE5 MISO 复用开漏输出
- GPIO_Set(GPIOE,PIN4,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU); //PE4 上拉输出
-
- GPIO_AF_Set(GPIOE,2,5); //PE2-AF5
- GPIO_AF_Set(GPIOE,6,5); //PE6-AF5
- GPIO_AF_Set(GPIOE,5,5); //PE5-AF5
-
- //SPI4配置
- /* 波特率配置 */
- SPI4->CFG1 &=~(0X07<<28);
- SPI4->CFG1 |=(0X01<<28); //SPI时钟/2
- //通信模式
- SPI4->CFG2 &= ~(0x03<<17); //全双工
- //时钟相位 CPHA
- SPI4->CFG2 &=~(1<<24); //从第1个时钟边沿采样数据
- //时钟极性 CPOL
- SPI4->CFG2 &=~(1<<25); //空闲时SCK信号为低电平
- //数据格式
- SPI4->CFG1 |= 0x07; //8位数据格式
- //数据帧格式
- SPI4->CFG2 &=~(1<<23); //先发送MSB
- //串行协议
- SPI4->CFG2 &=~(3<<19); //SPI Motorola
- //CRC计算
- SPI4->CFG1 &=~(1<<22); //禁止CRC使能
- //CRC处理长度
- SPI4->CFG1 |= (7<<16); //8位CRC
- //SS信号输入软件管理
- SPI4->CFG2 |=(1<<26); // SSM SS输入值由SSI值决定
- SPI4->CR1 |=(1<<12); // SSI
- //SSOM 主模式输出管理
- SPI4->CFG2 &=~(1<<30);
- //复用功能GPIO控制
- SPI4->CFG2 |=(1<<31);
- //SPI模式
- SPI4->CFG2 |= (1<<22); //主模式
-
- SPI4->CFG1 |= (1<<15); //使能DMA_TX
-
-
- // SPI4_ReadWriteByte(0xff); //启动传输
-
- //DMA配置
- while(DMA1_Stream2->CR&0X01); //等待DMA1可配置
- DMAMUX1_Channel2->CCR=84; //DMA1_stream2的通道选择: 84,即SPI4_Tx对应的通道
- //详见<<STM32H7xx参考手册>>16.3.2节,Table 116
-
- DMA1->LIFCR|=0X3D<<16; //清空通道2上所有中断标志
- DMA1_Stream2->FCR=0X0000021; //设置为默认值
-
- DMA1_Stream2->PAR=(uint32_t)(&SPI4->TXDR); //DMA外设地址
- DMA1_Stream2->M0AR=(uint32_t)Tx_Buffer; //DMA 存储器0地址
- DMA1_Stream2->NDTR = 2048; //DMA传输数据量
- DMA1_Stream2->CR=0; //先全部复位CR寄存器值
- DMA1_Stream2->CR &= ~(1<<0); //禁止数据流
- DMA1_Stream2->CR|=1<<6; //存储器到外设模式
- DMA1_Stream2->CR|=0<<8; //非循环模式(即使用普通模式)
- DMA1_Stream2->CR|=0<<9; //外设非增量模式
- DMA1_Stream2->CR|=1<<10; //存储器增量模式
- DMA1_Stream2->CR|=0<<11; //外设数据长度:8位
- DMA1_Stream2->CR|=0<<13; //存储器数据长度:8位
- DMA1_Stream2->CR|=2<<16; //高优先级
- DMA1_Stream2->CR|=0<<21; //外设突发单次传输
- DMA1_Stream2->CR|=0<<23; //存储器突发单次传输
- // DMA1_Stream2->FCR |= 1<<2; //禁止直接模式
- // DMA1_Stream2->FCR |= 3<<0; //FIFO完整容量
- DMA1_Stream2->CR|=1<<4; //使能TC中断
- // DMA1_Stream2->CR |= 1<<0; //使能数据流
- SPI4->CR1 |=(1<<0); // 使能SPI4
-
- }
复制代码
这初始化的问题在哪,改了好久了 |
|