gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_15);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
SPI_CTL0(SPI0)&= ~SPI_CTL0_SPIEN; //----Disable SPI
SPI_CTL0(SPI0)=(uint32_t)(
(0 << 15) | //-- 0=两线单向-- 1=单线双向
(0 << 14) | //-- 0=单线双向只接收--1=单线双向只发送
(0 << 13) | //-- 0=CRC计算禁止 --1=CRC计算使能
(0 << 12) | //-- 0=下一发送值来自发送寄存器-- 1=下一发送值来自CRC寄存器
(1 << 11) | //-- 0=8位帧长度-- 1=16位帧长度
(0 << 10) | //-- 0=两线单向全双工-- 1=两线单向只接收不发送
(0 << 9) | //--SSM 0=NSS脚从硬件管理 --1=起用SSI从软件管理
(1 << 8) | //--SSI 当SSM位为1时,此位值决定了NSS引脚电平
(0 << 7) | //-- 0=先发送MSB --1=先发送LSB
(0 << 6) | //-- 0=禁止SPI设备 --1=开启SPI设备
(4 << 3) | //-- (0-7)波特率控制,为PCLK的分频倍数(2,4,8,16,32,64,128,256)
(1 << 2) | //-- 0=配置为从设备 --1=主设备
(0 << 1) | //-- 时钟极性
(0 << 0)); //-- 时钟相位
SPI_CTL1(SPI0)=(uint32_t)(
(0 << 7) | //-- 0=TBE中断屏蔽-- 1=TBE中断不屏蔽
(0 << 6) | //-- 0=RBNE中断屏蔽-- 1=RBNE中断不屏蔽
(0 << 5) | //-- 0=错误中断屏蔽-- 1=错误中断不屏蔽
(1 << 2) | //-- 0=主模式下SS输出禁用-- 1=起用
(0 << 1) | //-- 0=TX的DMA缓冲禁止 --1=启用
(0 << 0)); //-- 0=RX的DMA缓冲禁止-- 1=启用
//SPI_STAT(SPI0) //----状态寄存器
//SPI_DATA(SPI0) //----数据寄存器
//SPI_CRCPOLY(SPI0) //----CRC多项式
//SPI_RCRC(SPI0) //----接收CRC计算结果
//SPI_TCRC(SPI0) //----发射CRC计算结果
SPI_I2SCTL(SPI0)=0;
//SPI_I2SPSC(SPI0)
//SPI_QCTL(SPI0)
SPI_CTL0(SPI0)|=SPI_CTL0_SPIEN; //----Enable SPI
//NVIC_SetPriority(SPI0_IRQn,1);
//NVIC_EnableIRQ(SPI0_IRQn);
重新改写了SPI0的初始化函数,效果一样(数据发送和接收正常,就是NSS信号一直被拉低),请帮忙检查和指正一下问题。谢谢! |