OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 814|回复: 3

关于 hal 库生成 USART2 库文件不能收发数据问题请教。

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-11-6
在线时间
3 小时
发表于 2020-5-12 21:08:58 | 显示全部楼层 |阅读模式
3金钱
芯片:STM32F051K8TX
外部晶振:16Mhz
使用串口:USART2,中断发送接收

使用STM32Cube 生成 STM32F051K8TX芯片的 工程文件,发送串口数据,串口调试工具无法接收到数据。使用在线调试, 总是在这个地方就返回 (huart->gState == HAL_UART_STATE_READY),一直找不到原因,请帮忙查看什么原因,谢谢。
使用一个LED做指示,可以正常工作, 生成的工程,只改了main.C文件,其它文件没有改。



  1. /* USER CODE BEGIN Header */
  2. /**
  3.   ******************************************************************************
  4.   * [url=home.php?mod=space&uid=175224]@file[/url]           : main.c
  5.   * @brief          : Main program body
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * <h2><center>&#169; Copyright (c) 2020 STMicroelectronics.
  10.   * All rights reserved.</center></h2>
  11.   *
  12.   * This software component is licensed by ST under BSD 3-Clause license,
  13.   * the "License"; You may not use this file except in compliance with the
  14.   * License. You may obtain a copy of the License at:
  15.   *                        opensource.org/licenses/BSD-3-Clause
  16.   *
  17.   ******************************************************************************
  18.   */
  19. /* USER CODE END Header */

  20. /* Includes ------------------------------------------------------------------*/
  21. #include "main.h"
  22. #include "usart.h"
  23. #include "gpio.h"

  24. /* Private includes ----------------------------------------------------------*/
  25. /* USER CODE BEGIN Includes */
  26. #include "stdio.h"
  27. /* USER CODE END Includes */

  28. /* Private typedef -----------------------------------------------------------*/
  29. /* USER CODE BEGIN PTD */
  30. #ifdef __GNUC_
  31. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  32. #else
  33. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  34. #endif

  35. //重映射printf的功能
  36. PUTCHAR_PROTOTYPE
  37. {
  38.   HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);

  39.   return ch;
  40. }
  41. /* USER CODE END PTD */

  42. /* Private define ------------------------------------------------------------*/
  43. /* USER CODE BEGIN PD */
  44. /* USER CODE END PD */

  45. /* Private macro -------------------------------------------------------------*/
  46. /* USER CODE BEGIN PM */

  47. /* USER CODE END PM */

  48. /* Private variables ---------------------------------------------------------*/

  49. /* USER CODE BEGIN PV */

  50. /* USER CODE END PV */

  51. /* Private function prototypes -----------------------------------------------*/
  52. void SystemClock_Config(void);
  53. /* USER CODE BEGIN PFP */
  54. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
  55. void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);

  56. /* USER CODE END PFP */

  57. /* Private user code ---------------------------------------------------------*/
  58. /* USER CODE BEGIN 0 */

  59. uint8_t ch = 'k';
  60. uint8_t kRxBuffer[20];
  61. uint8_t kTxBuffer[5]={'w','a','n','g','\n'};

  62. /* USER CODE END 0 */

  63. /**
  64.   * @brief  The application entry point.
  65.   * @retval int
  66.   */
  67. int main(void)
  68. {
  69.   /* USER CODE BEGIN 1 */


  70.   /* USER CODE END 1 */

  71.   /* MCU Configuration--------------------------------------------------------*/

  72.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  73.   HAL_Init();

  74.   /* USER CODE BEGIN Init */

  75.   /* USER CODE END Init */

  76.   /* Configure the system clock */
  77.   SystemClock_Config();

  78.   /* USER CODE BEGIN SysInit */

  79.   /* USER CODE END SysInit */

  80.   /* Initialize all configured peripherals */
  81.   MX_GPIO_Init();
  82.   MX_USART2_UART_Init();
  83.   /* USER CODE BEGIN 2 */
  84.        
  85.         HAL_UART_Receive_IT(&huart2,(uint8_t *)kRxBuffer, 10);

  86.   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
  87.   /* USER CODE END 2 */

  88.   /* Infinite loop */
  89.   /* USER CODE BEGIN WHILE */
  90.   while (1)
  91.   {
  92.                 printf("\n\r welcome to www.waveshere.com !!!\n\r");

  93.                 HAL_Delay(500);
  94. HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
  95.                
  96.                 HAL_UART_Transmit(&huart2,(uint8_t *)&ch, 1, 0xffff);
  97.                 HAL_UART_Transmit_IT(&huart2, (uint8_t *)kTxBuffer, 5);
  98.                
  99.     /* USER CODE END WHILE */

  100.     /* USER CODE BEGIN 3 */
  101.   }
  102.   /* USER CODE END 3 */
  103. }

  104. /**
  105.   * @brief System Clock Configuration
  106.   * @retval None
  107.   */
  108. void SystemClock_Config(void)
  109. {
  110.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  111.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  112.   /** Initializes the CPU, AHB and APB busses clocks
  113.   */
  114.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  115.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  116.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  117.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  118.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL3;
  119.   RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
  120.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  121.   {
  122.     Error_Handler();
  123.   }
  124.   /** Initializes the CPU, AHB and APB busses clocks
  125.   */
  126.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  127.                               |RCC_CLOCKTYPE_PCLK1;
  128.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  129.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  130.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  131.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  132.   {
  133.     Error_Handler();
  134.   }
  135. }

  136. /* USER CODE BEGIN 4 */
  137. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  138. {
  139.         UNUSED(huart);
  140.         HAL_UART_Transmit(&huart2,(uint8_t *)kRxBuffer, 10, 0xffff);
  141.        
  142.         HAL_UART_Receive_IT(&huart2,(uint8_t *)kRxBuffer, 10);
  143. }

  144. void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
  145. {
  146.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
  147.        
  148. }

  149. /* USER CODE END 4 */

  150. /**
  151.   * @brief  This function is executed in case of error occurrence.
  152.   * @retval None
  153.   */
  154. void Error_Handler(void)
  155. {
  156.   /* USER CODE BEGIN Error_Handler_Debug */
  157.   /* User can add his own implementation to report the HAL error return state */

  158.   /* USER CODE END Error_Handler_Debug */
  159. }

  160. #ifdef  USE_FULL_ASSERT
  161. /**
  162.   * @brief  Reports the name of the source file and the source line number
  163.   *         where the assert_param error has occurred.
  164.   * @param  file: pointer to the source file name
  165.   * @param  line: assert_param error line source number
  166.   * @retval None
  167.   */
  168. void assert_failed(uint8_t *file, uint32_t line)
  169. {
  170.   /* USER CODE BEGIN 6 */
  171.   /* User can add his own implementation to report the file name and line number,
  172.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  173.   /* USER CODE END 6 */
  174. }
  175. #endif /* USE_FULL_ASSERT */

  176. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
复制代码


以下是 USART.C 文件

  1. /**
  2.   ******************************************************************************
  3.   * File Name          : USART.c
  4.   * Description        : This file provides code for the configuration
  5.   *                      of the USART instances.
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * <h2><center>&#169; Copyright (c) 2020 STMicroelectronics.
  10.   * All rights reserved.</center></h2>
  11.   *
  12.   * This software component is licensed by ST under BSD 3-Clause license,
  13.   * the "License"; You may not use this file except in compliance with the
  14.   * License. You may obtain a copy of the License at:
  15.   *                        opensource.org/licenses/BSD-3-Clause
  16.   *
  17.   ******************************************************************************
  18.   */

  19. /* Includes ------------------------------------------------------------------*/
  20. #include "usart.h"

  21. /* USER CODE BEGIN 0 */

  22. /* USER CODE END 0 */

  23. UART_HandleTypeDef huart2;

  24. /* USART2 init function */

  25. void MX_USART2_UART_Init(void)
  26. {

  27.   huart2.Instance = USART2;
  28.   huart2.Init.BaudRate = 115200;
  29.   huart2.Init.WordLength = UART_WORDLENGTH_8B;
  30.   huart2.Init.StopBits = UART_STOPBITS_1;
  31.   huart2.Init.Parity = UART_PARITY_NONE;
  32.   huart2.Init.Mode = UART_MODE_TX_RX;
  33.   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  34.   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  35.   huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  36.   huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  37.   if (HAL_UART_Init(&huart2) != HAL_OK)
  38.   {
  39.     Error_Handler();
  40.   }

  41. }

  42. void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
  43. {

  44.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  45.   if(uartHandle->Instance==USART2)
  46.   {
  47.   /* USER CODE BEGIN USART2_MspInit 0 */

  48.   /* USER CODE END USART2_MspInit 0 */
  49.     /* USART2 clock enable */
  50.     __HAL_RCC_USART2_CLK_ENABLE();
  51.   
  52.     __HAL_RCC_GPIOA_CLK_ENABLE();
  53.     /**USART2 GPIO Configuration   
  54.     PA2     ------> USART2_TX
  55.     PA3     ------> USART2_RX
  56.     */
  57.     GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
  58.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  59.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  60.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  61.     GPIO_InitStruct.Alternate = GPIO_AF1_USART2;
  62.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  63.     /* USART2 interrupt Init */
  64.     HAL_NVIC_SetPriority(USART2_IRQn, 1, 0);
  65.     HAL_NVIC_EnableIRQ(USART2_IRQn);
  66.   /* USER CODE BEGIN USART2_MspInit 1 */

  67.   /* USER CODE END USART2_MspInit 1 */
  68.   }
  69. }

  70. void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
  71. {

  72.   if(uartHandle->Instance==USART2)
  73.   {
  74.   /* USER CODE BEGIN USART2_MspDeInit 0 */

  75.   /* USER CODE END USART2_MspDeInit 0 */
  76.     /* Peripheral clock disable */
  77.     __HAL_RCC_USART2_CLK_DISABLE();
  78.   
  79.     /**USART2 GPIO Configuration   
  80.     PA2     ------> USART2_TX
  81.     PA3     ------> USART2_RX
  82.     */
  83.     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);

  84.     /* USART2 interrupt Deinit */
  85.     HAL_NVIC_DisableIRQ(USART2_IRQn);
  86.   /* USER CODE BEGIN USART2_MspDeInit 1 */

  87.   /* USER CODE END USART2_MspDeInit 1 */
  88.   }
  89. }

  90. /* USER CODE BEGIN 1 */

  91. /* USER CODE END 1 */

  92. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
复制代码



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-12 21:09:00 | 显示全部楼层
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-11-6
在线时间
3 小时
 楼主| 发表于 2020-5-12 21:11:31 | 显示全部楼层
附上配置信息:



回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-5-13 01:26:59 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 17:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表