[mw_shl_code=c,true] [/mw_shl_code]
[mw_shl_code=c,true]void SPI1_Configuration( void )[/mw_shl_code]
[mw_shl_code=c,true]{
RCC->APB2ENR |= 1<<2 ; //PORTA时钟使能
RCC->APB2ENR |= 1<<12 ; //SPI1时钟使能
GPIOA->CRL &= 0X0000FFFF ;
GPIOA->CRL |= 0XBBB30000 ; //PA567复用 PA4推挽输出
GPIOA->ODR |= 15<<4 ; //PA4567上拉,PA4用作从机的片选信号
//GPIOA->CRL &= 0X000FFFFF ;
//GPIOA->CRL |= 0XBBB00000 ; //PA567复用
//GPIOA->ODR |= 7<<5 ; //PA567上拉
SPI1->CR1 = 0x0000 ; //SPI1->CR1复位
SPI1->CR1 |= 0<<10 ; //全双工模式
SPI1->CR1 |= 1<<9 ; //nss软件管理
// SPI1->CR1 &= ~(1<<8) ; //nss低电平,从机要设置成高电平
// SPI1->CR1 &= ~(1<<2) ; //SPI从机
SPI1->CR1 |= 1<<8 ; //nss高电平,主机要设置成高电平
SPI1->CR1 |= 1<<2 ; //SPI主机
SPI1->CR1 |= 0<<11 ; //数据格式:8bit
SPI1->CR1 |= 1<<1 ; //CPOL=1:空闲模式下SCK为高电平
SPI1->CR1 |= 1<<0 ; //CPHA=1:数据采样从第二个时钟沿开始
SPI1->CR1 |= 7<<3 ; //Fsck=Fcpu/256
SPI1->CR1 |= 0<<7 ; //MSBfirst
SPI1->CR2 |= 1<<1 ; //发送缓冲区DMA使能
SPI1->CR2 |= 1<<0 ; //接收缓冲区DMA使能
SPI1->CR1 |= 1<<6 ; //SPI设备使能
}
void SPI1_DMA_Configuration( void )
{
RCC->AHBENR |= 1<<0 ; //DMA1时钟使能
/*------------------配置SPI1_RX_DMA通道Channel2---------------------*/
DMA1_Channel2->CCR &= ~( 1<<14 ) ; //非存储器到存储器模式
DMA1_Channel2->CCR |= 2<<12 ; //通道优先级高
DMA1_Channel2->CCR &= ~( 3<<10 ) ; //存储器数据宽度8bit
DMA1_Channel2->CCR &= ~( 3<<8 ) ; //外设数据宽度8bit
DMA1_Channel2->CCR |= 1<<7 ; //存储器地址增量模式
DMA1_Channel2->CCR &= ~( 1<<6 ) ; //不执行外设地址增量模式
DMA1_Channel2->CCR &= ~( 1<<5 ) ; //执行循环操作
DMA1_Channel2->CCR &= ~( 1<<4 ) ; //从外设读
DMA1_Channel2->CNDTR &= 0x0000 ; //传输数量寄存器清零
DMA1_Channel2->CNDTR = buffersize ; //传输数量设置为buffersize个
DMA1_Channel2->CPAR = (u32)(&SPI1->DR);//SPI1_DR_Addr ; //设置外设地址,注意PSIZE
DMA1_Channel2->CMAR = (u32)SPI1_RX_Buff ; //设置DMA存储器地址,注意MSIZE
/*------------------配置SPI1_TX_DMA通道Channel3---------------------*/
DMA1_Channel3->CCR &= ~( 1<<14 ) ; //非存储器到存储器模式
DMA1_Channel3->CCR |= 0<<12 ; //通道优先级最低
DMA1_Channel3->CCR &= ~( 3<<10 ) ; //存储器数据宽度8bit
DMA1_Channel3->CCR &= ~( 3<<8 ) ; //外设数据宽度8bit
DMA1_Channel3->CCR |= 1<<7 ; //存储器地址增量模式
DMA1_Channel3->CCR &= ~( 1<<6 ) ; //不执行外设地址增量模式
DMA1_Channel3->CCR &= ~( 1<<5 ) ; //不执行循环操作
DMA1_Channel3->CCR |= 1<<4 ; //从存储器读
DMA1_Channel3->CNDTR &= 0x0000 ; //传输数量寄存器清零
DMA1_Channel3->CNDTR = buffersize ; //传输数量设置为buffersize个
DMA1_Channel3->CPAR = (u32)(&SPI1->DR);//SPI1_DR_Addr ; //设置外设地址,注意PSIZE
DMA1_Channel3->CMAR = (u32)SPI1_TX_Buff ; //设置DMA存储器地址,注意MSIZE
}[/mw_shl_code]
这个是SPI的配置,我想问下如果不是用PA4管脚来使能从机的话,那么应该怎么配置呢。比如:我想用PB12来使能从机进行SPI通信应该如何配置啊。
|