开发工具:万利STM32F3210B-LK1+IAR6.4+Jlink
1、在做SPI测试数据输入输出的时候,全速运行F5可以正常运行,但是单步运行f10会死在程序while(SPI_GetFlagStatus(SPI2, SPI_FLAG_RXNE)==RESET)处。观察寄存器RXNE的标志位始终为0,怎么硬件不置位呢,全速运行明明收到数据了啊。
尝试办法:试了半天原来SPI不能用跟踪寄存器方式单步运行,删掉寄存器框框,单步运行就能OK到底,但是没用到在线调试的优点啊,寄存器没法看啊
2、SPI口,同步串行通信中的“同步”指的是什么?
答:同步,是指在通信过程中,被控制的对象与主机的时钟是相同的,都是由主机发出。
3、使用SPI外设时如何设定NSS为通用IO口?
答:主模式和从模式下均可以由软件或硬件进行NSS管理; 将SPI_CR1寄存器的SSM位置为1时,NSS引脚将被释放出来用作GPIO口;使用STM32软件库时,初始化SPI外设时,使用如下代码: SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 如果NSS引脚用于其他外设时,需要使能NSS输出: SPI_SSOutputCmd(SPIx, ENABLE);
4、SPI2配置为主模式时候,4-8行程序顺序不要变动,首先查询SPI2发送缓存器空标志位,等待直到其标志位为1,也就是发送缓存器为空,要再次发送数据了SPI_SendData(SPI2, SPI2_Buffer_Tx[Tx_Idx++]);这句必须放到while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE)==RESET);后面,SPI_SendData(SPI1, SPI1_Buffer_Tx[Tx_Idx]);也可以放到while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE)==RESET);前面
while(Tx_Idx
{
/* Wait for SPI2 Tx buffer empty */
while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE)==RESET);
/* Send SPI1 data */
SPI_SendData(SPI1, SPI1_Buffer_Tx[Tx_Idx]);
/* Send SPI2 data */
SPI_SendData(SPI2, SPI2_Buffer_Tx[Tx_Idx++]);
/* Wait for SPI1 data reception */
//while(SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE)==RESET);
/* Read SPI1 received data */
//SPI1_Buffer_Rx[Rx_Idx] = SPI_ReceiveData(SPI1);
/* Wait for SPI2 data reception */
// while(SPI_GetFlagStatus(SPI2, SPI_FLAG_RXNE)==RESET);
/* Read SPI2 received data */
//SPI2_Buffer_Rx[Rx_Idx++] = SPI_ReceiveData(SPI2);
while(SPI_GetFlagStatus(SPI2, SPI_FLAG_RXNE)==RESET);
SPI2_Buffer_Rx[Rx_Idx] = SPI_ReceiveData(SPI2);
while(SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE)==RESET);
上一篇:STM32建立IAR开发环境
下一篇:stm32控制舵机
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LTC3873EDDB-5 的参考设计
- 使用 Diodes Incorporated 的 PT8A 3518C 的参考设计
- PCbb
- DC814A-G,使用 LTC6908-1 17MHz 至 170MHz 固定频率硅振荡器的演示板
- STA516B13TR的典型四路半桥配置电路,60V,6A四路功率半桥
- AD8546ARMZ-RL电压跟随器配置典型应用电路
- A_38_V10基于IPS2电机换向传感器的设计
- 具有 1.25% 参考和可调滞后的 MIC841LYC5 比较器的典型应用
- 用于电机控制的 MOSFET 功率驱动器
- MIKROE-3510, TFT Board 7 电容式显示板,基于 5" 800x480 像素 TFT 显示器