所有关于电路

STM32 Nucleo to Arduino Uno SPI通信NSS位不工作

Z

线程启动

Z_IRON.

2020年5月24日加入
23
我正在编程一个STM32L47RG Nucleo(主)通过SPI与Arduino Uno (Slave)通信,但有一个问题,我似乎不能弄清楚。
capture.jpg.
从我的理解,Arduino将只接收数据时通过莫西人行NSS (CS)线拉低和NSS销时只会拉低SSOE(奴隶选择允许输出)启用和SPE (SPI外围启用)一点也使有关SSM(奴隶选择管理)是零。禁用SPE位将使NSS返回高,Arduino将无法接收数据。

STM32正在发送,从服务器不发回任何东西。下面是我的main.c STM32文件的代码:


C:
int main(void){char user_data [] =“test”;spi2_gpioinits();spi2_inits();gpio_buttoninit();gpio_ledinit();spi_ssoeconfig(spi2,启用);虽然(1){while(gpio_readpin(gpioc,13)== clear){gpio_togglepin(gpioa,5);//以避免按钮去弹跳相关问题200ms延迟//延迟();//启用SPI2外设SPI_PIALICEnControl(SPI2,启用);gpio_togglepin(gpioa,5); //first send length information uint8_t dataLen = strlen(user_data); SPI_Send(SPI2,&dataLen,1); GPIO_TogglePin(GPIOA,5); //to send data SPI_Send(SPI2,(uint8_t*)user_data,strlen(user_data)); //lets confirm SPI is not busy while( SPI_GetFlagStatus(SPI2,SPI_BUSY_FLAG)); //GPIO_TogglePin(GPIOA,5); //Disable the SPI2 peripheral SPI_PeripheralControl(SPI2,DISABLE); } } return 0; }
我正在通过Arduino侧的串行监视器读取NSS位。当SPI2_GPIOInits()被调用时,它总是处于高位,并在短暂的时间内转为低位,然后再次上升。(所有Init函数都是正确的)。问题是在SPI_SSOEConfig(SPI2,ENABLE)被调用之后,然后SPI_PeripheralControl(SPI2,ENABLE)被调用,NSS应该被拉低对吗?然而我仍然从Arduino读取一个高值,它没有接收任何东西。

Capture3.JPG
您可以在边上看到的每一行都启用了SPE和SSOE。

Untitled.jpg
我使用一个逻辑电平转换器从spark fun (https://www.sparkfun.com/products/12009)在两块木板之间。上图显示了我的布局。Nucleo上的5v和3.3v引脚来自arduino连接器引脚(不是morpho引脚)。

为什么NSS位仍然读取高,Arduino没有接收到数据?

附件