中级会员
 
- 积分
- 259
- 金钱
- 259
- 注册时间
- 2014-5-10
- 在线时间
- 0 小时
|

楼主 |
发表于 2014-5-28 23:50:16
|
显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,我下面的代码有问题吗?我用两个SPI通信,然后用DMA读取SPI2的数据,然后保存到一个数组中,然后用printf打印到串口,可是一直都是打印32个00,不知道哪里错了,请原子哥明示
u8 SPI1_Buffer_Tx[BufferSize] = /* 定义待 SPI1 传输数据 */
{
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,
0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20
};
u32 SPI1_Buffer_Rx[BufferSize]; /* 开辟内存空间待 SPI1 接收 */
u32 SPI2_Buffer_Rx[BufferSize]; /* 开辟内存空间待 SPI2 接收 */
u8 Tx_Idx = 0; /* 发送计数变量 */
u8 Rx_Idx = 0; /* 接收计数变量 */
vu8 k = 0 , i = 0; /* 循环计数变量 */
/* 自定义函数声明 --------------------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void SPI_Configuration(void);
/*******************************************************************************
* 函数名 : main
* 函数描述 : main 函数
* 输入参数 : 无
* 输出结果 : 无
* 返回值 : 无
*******************************************************************************/
int main(void)
{
/* 设置系统时钟 */
RCC_Configuration();
/* 设置 GPIO 端口 */
GPIO_Configuration();
/* 设置 SPI */
SPI_Configuration();
/* 初始化 USART */
uart_init(9600);
/* 延时函数初始化 */
delay_init();
/* LED函数初始化 */
LED_Init();
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
DMA1_Channel3_NVIC_Init(); //中断分组初始化
/* 设置 SPI1 为主机*/
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_Init(SPI1, &SPI_InitStructure);
/* 设置 SPI2 为从机*/
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
SPI_Init(SPI2, &SPI_InitStructure);
while(Tx_Idx < BufferSize)
{
/* 等待 SPI1 发送缓冲空 */
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* SPI1 发送数据 */
SPI_I2S_SendData(SPI1, SPI1_Buffer_Tx[Tx_Idx++]);
/* 等待 SPI2 接收数据完毕 */
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* 读出 SPI2 接收的数据 */
SPI2_Buffer_Rx[Rx_Idx] = SPI_I2S_ReceiveData(SPI2);
/* 等待 SPI1 接收数据完毕 */
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
/* 读出 SPI1 接收的数据 */
SPI1_Buffer_Rx[Rx_Idx++] = SPI_I2S_ReceiveData(SPI1);
}
MYDMA_Config(DMA1_Channel3,(u32)&SPI2->DR,(u32)SPI2_Buffer_Rx,32);
SPI_I2S_DMACmd(SPI2,SPI_I2S_DMAReq_Rx,ENABLE);
MYDMA_Enable(DMA1_Channel3); //开启一次DMA传输
delay_ms(100); //确保数据发送完成
printf("\r\nThe memmory has receive data below: \r\n");
for(k = 0; k < BufferSize ; k ++)
{
printf("%0.2d \r" , *(SPI2_Buffer_Rx + k));
for(i = 0 ; i < 200 ; i ++);
}
} |
|