你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

时钟频率引起STM32串口数据错误

[复制链接]
abend 发布时间:2015-1-7 17:39
使用STM32 Nucleo-L053R8开发板,基于HAL库做开发,中断方式做串口收发数据,会出现数据丢失或者错误的情况,如下图:
232err.jpg

后来收到了论坛做活动优惠购买的STM32 Nucleo_F072RB,这两者,F072是ARM Cortex-M0,内核,L053是ARM Cortex-M0+内核,但是因为我的代码是用兼容的HAL库写的,所以很容易就移植到了F072RB平台编译通过。下载到F072RB上运行发现,串口数据丢失或者错误的问题完全消失。
请教了一位有ARM核MCU开发经验的朋友,朋友说中断方式操作串口最好使用FIFO。但是STM32的这两个MCU都没有串口FIFO,且这也解释不了为何F072运行正常,而L053运行出错。朋友再次指出查看一下时钟配置。
发现L053的程序代码中给串口配的时钟频率只有2.097Mhz,但是F072的达到了48Mhz。
2.097.jpg

48.jpg

重新配置L053的串口时钟为32Mhz,然后运行程序,串口数据丢失的现象消失。

32.jpg
相关时钟配置代码的代码:
  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInit;

  __PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;
  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;

  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_USART2;
  PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
  PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;

  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);

  __SYSCFG_CLK_ENABLE();

收藏 评论16 发布时间:2015-1-7 17:39

举报

16个回答
guomenhaolaogon 回答时间:2015-1-7 18:10:03
这个得多注意下 了
台湾华瑞 回答时间:2015-1-7 18:44:47
这么多代码,
dsjsjf 回答时间:2015-1-7 21:54:53
时钟配置不对,串口数据当然有问题了
wambob 回答时间:2015-1-8 13:54:17
两个板子用的不一样,移值的时候要注意时钟配置
zhaofei1 回答时间:2015-1-8 14:37:22
学习了啊、、
与非朋 回答时间:2015-1-8 14:59:56
回一个  哈哈
abend 回答时间:2015-1-9 10:31:51
哎 写原创技术文章没人理
abend 回答时间:2015-1-9 10:38:05
dsjsjf 发表于 2015-1-7 21:54
时钟配置不对,串口数据当然有问题了

不是时钟配置不对,是时钟频率相对于自己代码中串口的频繁操作相对偏慢了。我在代码中用中断方式,只要串口有一个字符进来,就立刻产生一个中断。
之前配的那个串口时钟频率,其实用来实现很多坛友们发帖分享的什么串口输出hello world之类,不会有任何问题。
万里-363223 回答时间:2015-1-10 09:11:17
这个问题值得注意..........
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版