OpenEdv-开源电子网

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

SPI DMA配置问题 对于nss的疑问

[复制链接]

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2014-9-29 11:08:19 | 显示全部楼层 |阅读模式
5金钱
[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通信应该如何配置啊。


最佳答案

查看完整内容[请看2#楼]

你用了硬件SPI,就要根据手册上的指定端口配置,除非你用模拟,那么才可以脱离固定的IO口限制。
原子哥是不是又要出黑科技了呀。^_^...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2014-4-3
在线时间
18 小时
发表于 2014-9-29 11:08:20 | 显示全部楼层
你用了硬件SPI,就要根据手册上的指定端口配置,除非你用模拟,那么才可以脱离固定的IO口限制。
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2014-9-29 11:25:49 | 显示全部楼层
回复【2楼】dixdsqaid:
---------------------------------
谢了。^_^
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 22:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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