toofree 发表于 2017-7-14 12:01:41

算你狠,用的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);


另外你这程序能跑吗?时钟不对,跑不动吧。
建议升级库。

张亚飞 发表于 2017-7-14 12:10:23

toofree 发表于 2017-7-14 12:01
算你狠,用的3.0.0的库,建的uv5.0的工程

时钟初始化部分有错误。


改过来确实好了,这个工程用了很久,没注意到这个问题。

张亚飞 发表于 2017-7-14 12:24:25

toofree 发表于 2017-7-14 12:01
算你狠,用的3.0.0的库,建的uv5.0的工程

时钟初始化部分有错误。


void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)这个函数不调用就可以默认用PLL作为system clock了吗

zhao.zhao 发表于 2017-7-14 13:33:27

张亚飞 发表于 2017-7-14 11:27
工程发了

用Cube吧,去年我把外部时钟改成内部时钟,看参考手册,小心翼翼的,花了一上午。一气之下,今年改Cube了,点点鼠标,花了5分钟,这个就是效率。

张亚飞 发表于 2017-7-14 13:45:27

zhao.zhao 发表于 2017-7-14 13:33
用Cube吧,去年我把外部时钟改成内部时钟,看参考手册,小心翼翼的,花了一上午。一气之下,今年改Cube了 ...

cube的串口定长接收太操蛋,DMA中断接收按照网上的帖子弄了两回没弄成。 关键现在的一个项目用cube的串口接收数据时不定时会停止接收了,仿真的时候进不了中断,比较烦。

zhao.zhao 发表于 2017-7-14 15:04:52

你可以设置成接收一个字节中断一次,剩下的处理就和库函数一样了,相比,效率稍低点,我就是这么干的

张亚飞 发表于 2017-7-14 15:54:20

zhao.zhao 发表于 2017-7-14 15:04
你可以设置成接收一个字节中断一次,剩下的处理就和库函数一样了,相比,效率稍低点,我就是这么干的 ...

我用HAL_UART_Receive_IT开启下一次中断时把参数size设置成1,是这么做吗?我这样做在串口助手上发送大于一个字节时程序就死了。

zhao.zhao 发表于 2017-7-14 17:34:18

我就是这么做的,我系统运行的频率只有16MHz,中断抢先优先级设为最高,其他的中断优先级低一点,判断每个字节的意义计算量也不算少。

toofree 发表于 2017-7-16 00:06:22

张亚飞 发表于 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的,我还没有找到详细出处,函数库我有,但是缺少详细的外设样例程序。

张亚飞 发表于 2017-8-21 14:49:04

感谢 zhao.zhao 大神的帮忙,问题解决了,问题出在时钟分频上用串了。
页: 1 [2] 3
查看完整版本: STM32F103的定时器时钟频率的问题,困扰了我5年,至今搞不透