我想用SPI1和SPI2直接进行单向通讯
从机下 我是不是将SSM置位 然后清零SSI 从机就会一直有效了 大神们帮忙瞧瞧我下面俩个初始化 哪里有问题 求指点 我现在两个SPI都没有反应 查看寄存器 时钟和相应位 已经配置成功了 通讯一直没反应
SPI1:从 只接收
SPI2:主 只发送
SPI2 SPI1
CLK------->CLK
MOSI----->MOSI
//master
void SPI2_Init(void)
{ //SPI2 PB12cs PB13SCK PB14MISO PB15MOSI
//GPIOB时钟已开启
GPIOB->CRH&=0x000fffff;
GPIOB->CRH|=0xBBB00000;
GPIOB->ODR|=0x7<<13;
RCC->APB1ENR|=1<<14; //开启SPI2时钟
SPI2->CR1&=0;
SPI2->CR1|=(1<<14|1<<9|1<<6|1<<2); // 只发 主机 开启SPI功能
SPI2->DR=0X45;
}
//Slave
void SPI1_Init(void)
{ //SPI1 PA4cs PA5SCK PA6MISO PA7MOSI
//GPIOA时钟已开启
GPIOA->CRL&=0x000fffff;
GPIOA->CRL|=0xBBB00000;
GPIOA->ODR|=0x7<<5;
RCC->APB2ENR|=1<<12; //开启SPI2时钟
SPI1->CR1&=0;
SPI1->CR1|=(1<<10|1<<9|1<<6); // 只接收 从机 使能SSM 使能本地从机 开启SPI功能
SPI1->CR2&=0;
SPI1->CR2|=1<<6;//使能接收中断
MY_NVIC_Init(1,1,35,1);//开SPI1中断 向量号35 类别:抢占1 子2 组2
}
我主机是这样发数据的
main()
{
while(1)
{
SPI2->DR=0x45;//在这里我给DR赋值 在软件仿真下 DR的值是0 没被改成0x45 因此SPI1的接收中断 也没有进去
delay_ms(20);
}
}
现在运行起来 两个寄存器是这样的
|