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

STM32F767 使用STM32CubeMX生成串口乱码

[复制链接]
wamcncn 提问时间:2016-11-16 22:56 /
本帖最后由 wambob 于 2016-11-19 13:25 编辑

     如果起点错了,没有人指点,就会在寻找错误的路上越走越远,越来越迷惑...
未命名.JPG 未命名1.JPG

未命名.JPG
首先测试过板子串口是没有问题的,但是使用STM32CubeMX生成KEIL5或IAR都是乱码,开始考虑是不是STM32CubeMX 4.17版本的问题,使用072 nucleo测试有串口输出,没出现乱码,证明软件也没问题。      
       没办法了,只好用内部时钟测试了,结果串口输出不乱码了,顿时觉得掉坑里了,1天就这么浪费了
       无图无真相,设置很简单,就是开启了外部时钟和串口3。

7.JPG
串口配置
4.JPG
先使用外部时钟导致的乱码
3.JPG
到处工程编译下载。连接串口助手
6.JPG
使用内部时钟
2.JPG
串口输出
1.JPG

既然串口设置一样,一个乱码一个正常,串口初始化代码没问题,问题出在时钟上了
  1. */
  2. void SystemClock_Config(void)
  3. {

  4.   RCC_OscInitTypeDef RCC_OscInitStruct;
  5.   RCC_ClkInitTypeDef RCC_ClkInitStruct;
  6.   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;

  7.     /**Configure the main internal regulator output voltage
  8.     */
  9.   __HAL_RCC_PWR_CLK_ENABLE();

  10.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  11.     /**Initializes the CPU, AHB and APB busses clocks
  12.     */
  13.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  14.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  15.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  16.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  17.   RCC_OscInitStruct.PLL.PLLM = 25;
  18.   RCC_OscInitStruct.PLL.PLLN = 432;
  19.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  20.   RCC_OscInitStruct.PLL.PLLQ = 2;
  21.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  22.   {
  23.     Error_Handler();
  24.   }

  25.     /**Activate the Over-Drive mode
  26.     */
  27.   if (HAL_PWREx_EnableOverDrive() != HAL_OK)
  28.   {
  29.     Error_Handler();
  30.   }

  31.     /**Initializes the CPU, AHB and APB busses clocks
  32.     */
  33.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  34.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  35.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  36.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  37.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  38.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  39.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK)
  40.   {
  41.     Error_Handler();
  42.   }

  43.   PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3;
  44.   PeriphClkInitStruct.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1;
  45.   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  46.   {
  47.     Error_Handler();
  48.   }

  49.     /**Configure the Systick interrupt time
  50.     */
  51.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  52.     /**Configure the Systick
  53.     */
  54.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  55.   /* SysTick_IRQn interrupt configuration */
  56.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  57. }
复制代码
上面是外部时钟配置。
下面是内部时钟配置。
  1. void SystemClock_Config(void)
  2. {

  3.   RCC_OscInitTypeDef RCC_OscInitStruct;
  4.   RCC_ClkInitTypeDef RCC_ClkInitStruct;
  5.   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;

  6.     /**Configure the main internal regulator output voltage
  7.     */
  8.   __HAL_RCC_PWR_CLK_ENABLE();

  9.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  10.     /**Initializes the CPU, AHB and APB busses clocks
  11.     */
  12.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  13.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  14.   RCC_OscInitStruct.HSICalibrationValue = 16;
  15.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  16.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  17.   RCC_OscInitStruct.PLL.PLLM = 8;
  18.   RCC_OscInitStruct.PLL.PLLN = 216;
  19.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  20.   RCC_OscInitStruct.PLL.PLLQ = 2;
  21.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  22.   {
  23.     Error_Handler();
  24.   }

  25.     /**Activate the Over-Drive mode
  26.     */
  27.   if (HAL_PWREx_EnableOverDrive() != HAL_OK)
  28.   {
  29.     Error_Handler();
  30.   }

  31.     /**Initializes the CPU, AHB and APB busses clocks
  32.     */
  33.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  34.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  35.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  36.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  37.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  38.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  39.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK)
  40.   {
  41.     Error_Handler();
  42.   }

  43.   PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3;
  44.   PeriphClkInitStruct.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1;
  45.   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  46.   {
  47.     Error_Handler();
  48.   }

  49.     /**Configure the Systick interrupt time
  50.     */
  51.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  52.     /**Configure the Systick
  53.     */
  54.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  55.   /* SysTick_IRQn interrupt configuration */
  56.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  57. }

  58. /* USART3 init function */
  59. static void MX_USART3_UART_Init(void)
  60. {

  61.   huart3.Instance = USART3;
  62.   huart3.Init.BaudRate = 115200;
  63.   huart3.Init.WordLength = UART_WORDLENGTH_8B;
  64.   huart3.Init.StopBits = UART_STOPBITS_1;
  65.   huart3.Init.Parity = UART_PARITY_ODD;
  66.   huart3.Init.Mode = UART_MODE_TX_RX;
  67.   huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  68.   huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  69.   huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  70.   huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  71.   if (HAL_UART_Init(&huart3) != HAL_OK)
  72.   {
  73.     Error_Handler();
  74.   }

  75. }
复制代码
可是时钟配置根本看不出什么问题。不会是外部晶振的问题吧。再次把最大频率降至100,依然乱码。
谁有这个板子可以测试下,是不是晶振坏了。
附上乱码的代码: test.rar (3.08 MB, 下载次数: 15)
收藏 1 评论16 发布时间:2016-11-16 22:56

举报

16个回答
andrewz 回答时间:2016-11-17 08:32:45
wambob 发表于 2016-11-16 23:52
开始用外部晶振的,谁想到会出问题啊,严格来说来说也不是一天,其实是两个晚上 ...



cube配置好,再抄参数.
st.png
wamcncn 回答时间:2016-11-16 23:52:58
andrewz 发表于 2016-11-16 23:16
^_^,一个串口也能折腾一天.

开始用外部晶振的,谁想到会出问题啊,严格来说来说也不是一天,其实是两个晚上
wamcncn 回答时间:2016-11-17 20:02:14
limale 发表于 2016-11-17 12:45
串口配置的数据位是8位,串口工具用的7位,不知道有没有影响。

跟串口没关系
wamcncn 回答时间:2016-11-16 23:05:18
沙发我坐了,问题找到了,我可以睡个好觉了
andrewz 回答时间:2016-11-16 23:16:00
^_^,一个串口也能折腾一天.



st.png
peter001 回答时间:2016-11-17 08:11:58
时钟配错了是吧
xhzheng 回答时间:2016-11-17 08:25:58
LZ,啥情况导致的,晶振坏了??
limale 回答时间:2016-11-17 12:45:02
串口配置的数据位是8位,串口工具用的7位,不知道有没有影响。
wamcncn 回答时间:2016-11-17 20:02:59
andrewz 发表于 2016-11-17 08:32
cube配置好,再抄参数.

肯定先配好的
wamcncn 回答时间:2016-11-17 20:03:41

你说应该怎么配
assssdz 回答时间:2016-11-17 21:02:25
:):):)
andrewz 回答时间:2016-11-17 22:17:58
LZ解决了没,第三个晚上了..
st.png
中山无雪 回答时间:2016-11-18 01:26:22
串口乱码不外乎三个方面:
1、时钟配置问题;
2、位配置问题
3、band问题。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

wamcncn 回答时间:2016-11-18 19:10:06
andrewz 发表于 2016-11-17 22:17
LZ解决了没,第三个晚上了..

没有,不多定位到串口3时钟源的问题了
12下一页

所属标签

相似问题

官网相关资源

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