问题一:
使用F091RCT6的SPI1,用标准库配置。一般数据传输程序写成如下
u8 dSPIN_Write_Byte(u8 TxData)
{
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){;}//等待发送区空
SPI_SendData8(SPI1, TxData); //通过外设SPIx发送一个byte 数据
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){;} //等待接收完一个byte
return SPI_ReceiveData8(SPI1); //返回通过SPIx最近接收的数据
}
但是数据通讯错误,一直卡在
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){;} //等待接收完一个byte
之后网上各种找问题原因都没找到合适的答案,最后只能跟据某网友的解决方法应付一下,就是直接把上一句程序改为
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET){;} //等待接收完一个byte
可以正常通讯,没出现错误。目前也还不知道原因是什么。。。。。。有知道的大神望告知
问题二
使用nucleoF413开发板,用标准库进行配置。大家都知道这个板子是没有焊接外部高速晶振的,需要自己焊接。只是我没有板子上要求的那种晶振,就没有焊接了。但应该也不影响一些基本的使用。比如用标准库写个LED的驱动、按键控制是可以的,也可以正常实现。但是我在用sysTick时钟做延时功能就遇到点问题。延时不准,各种相关的配置都检查了好几遍没发问题,后来在论坛上问了下,都觉的应该是时钟配置的原因。然后我看了下标准库时钟的配置程序,
<div>void SystemInit (void)</div><div>static void SetSysClock(void)<b></b><i></i><u></u><sub></sub><sup></sup><strike></strike>
</div>
这两个函数是关于系统时钟、各种总线时钟等时钟的配置。不过里面的配置基本都是要求HSE做为时钟源时,才实现。那么我先再没有用到HSE。
static void SetSysClock(void)
这个函数里的配置就应该不会生效,只有在
重置RCC各种寄存的配置被保存下来了。那是不是就可以理解为这个时钟配置的不完善,我们后面若要用到模写功能还需要自己配置一下时钟。sysTick做延时很可能就是时钟没设置好,于是我在mian()函数中添加了下面的函数:
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI );
重字面意思就可以理解,用HSI做系统时钟源。这样一来,延时功能就实现了。不过还是感觉对这个时钟的配置遗漏什么,,,,。如有对这部分知识有见解的望赐教啊。。
分享一点PID算法的资料啊,也是其他网友分享的,先谢过了。总结的很好,希望对大家有用
|