本帖最后由 prince2010 于 2018-12-6 10:08 编辑
代码如下——
SPI1_CS0_Enable();
for(i = 0; i < 1000; i++)
{
SPI1->DR = DataIn
;
while(!(SPI1->SR & SPI_I2S_FLAG_RXNE)); //等待一个字节接收完
DataOut = SPI1->DR; //返回SPI1接收的数据
}
SPI1_CS0_Disable();
系统时钟72MHz,可是用示波器观察,循环体就这么几句代码,字节间发送间隔竟然达到1us!!!
大家帮忙看看
补充:以下是SPI 时钟引脚的波形。
我和你一样,平时都是开最高优化。。。好的代码是抗优化得。。。
- /* SPI_SR位定义 */
- #define RXNE 0x01
- #define TXE 0x02
- #define BSY 0x80
- /*
- *********************************************************************************************************
- * 函 数 名: SendBuf
- * 功能说明: 通过SPI接口发送多个字节
- * 形 参: buf 数据地址
- * sz 发送数据大小
- * 返 回 值: __TRUE
- *********************************************************************************************************
- */
- static BOOL SendBuf (U8 *buf, U32 sz)
- {
- U32 i;
- for (i = 0; i < sz; i++)
- {
- SPI_SelectHard->DR = buf[i];
- /* 等待发送完成 */
- while (!(SPI_SelectHard->SR & TXE));
- SPI_SelectHard->DR;
- }
-
- /* 等待接收完成 */
- while (SPI_SelectHard->SR & (BSY | RXNE))
- {
- SPI_SelectHard->DR;
- }
- return (__TRUE);
- }
复制代码如果开启高优化后软件不能运行,大部分和“volatile”有关。
先把优化开到最高,有问题再一步步解决,可以参考下图来查找问题可能的原因:
C 程序中的怪异现象.png (1.28 MB, 下载次数: 0)
下载附件
C程序中的怪异现象
2018-12-6 19:32 上传
一周热门 更多>