算你狠,用的3.0.0的库,建的uv5.0的工程:L
时钟初始化部分有错误。
void init_rcc(void)
{
ErrorStatus HSEStrartUpStatus;
RCC_DeInit(); //³õʼ»¯
RCC_HSEConfig(RCC_HSE_ON) ;
HSEStrartUpStatus =RCC_WaitForHSEStartUp();
if(HSEStrartUpStatus ==SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_SYSCLK_Div2);
RCC_PCLK2Config、RCC_PCLK1Config不能用RCC_SYSCLK_Div1的参数。
进去函数看一下说明,要用对应的,RCC_HCLK_Div2。
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
另外你这程序能跑吗?时钟不对,跑不动吧。
建议升级库。
toofree 发表于 2017-7-14 12:01
算你狠,用的3.0.0的库,建的uv5.0的工程
时钟初始化部分有错误。
改过来确实好了,这个工程用了很久,没注意到这个问题。
toofree 发表于 2017-7-14 12:01
算你狠,用的3.0.0的库,建的uv5.0的工程
时钟初始化部分有错误。
void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)这个函数不调用就可以默认用PLL作为system clock了吗
张亚飞 发表于 2017-7-14 11:27
工程发了
用Cube吧,去年我把外部时钟改成内部时钟,看参考手册,小心翼翼的,花了一上午。一气之下,今年改Cube了,点点鼠标,花了5分钟,这个就是效率。
zhao.zhao 发表于 2017-7-14 13:33
用Cube吧,去年我把外部时钟改成内部时钟,看参考手册,小心翼翼的,花了一上午。一气之下,今年改Cube了 ...
cube的串口定长接收太操蛋,DMA中断接收按照网上的帖子弄了两回没弄成。 关键现在的一个项目用cube的串口接收数据时不定时会停止接收了,仿真的时候进不了中断,比较烦。
你可以设置成接收一个字节中断一次,剩下的处理就和库函数一样了,相比,效率稍低点,我就是这么干的
zhao.zhao 发表于 2017-7-14 15:04
你可以设置成接收一个字节中断一次,剩下的处理就和库函数一样了,相比,效率稍低点,我就是这么干的 ...
我用HAL_UART_Receive_IT开启下一次中断时把参数size设置成1,是这么做吗?我这样做在串口助手上发送大于一个字节时程序就死了。
我就是这么做的,我系统运行的频率只有16MHz,中断抢先优先级设为最高,其他的中断优先级低一点,判断每个字节的意义计算量也不算少。
张亚飞 发表于 2017-7-14 12:24
void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)这个函数不调用就可以默认用PLL作为system clock了 ...
不要用默认的,默认是内部8MHz RC时钟源。最高主频是64M,支持不了72M。
要用外部时钟的话,还是乖乖的按套路来吧。建议使用3.1.2或3.5.0的库。你这个3.0.0的,我还没有找到详细出处,函数库我有,但是缺少详细的外设样例程序。
感谢 zhao.zhao 大神的帮忙,问题解决了,问题出在时钟分频上用串了。