[STM32U3] 【每周分享】【STM32U385RG 测评】+调试串口通讯,字符串打印
接着上一回这会进行串口打印实验一、查询原理图找到我们需要配置的串口如上图PA9、PA10、USART1二、按流程打开IDE软件建立新的工程文件。配置如下debug、RCC、USART1配置完成后就可以生成代码了三、代码修改1、gpio.c不需要修改#includegpio.hvoidMX_GPIO_Init(void){/* GPIO Ports Clock Enable */__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();}2、USART.c需要在fputc里面的输出指向串口(重定向)代码如下#includeusart.h/* USER CODE BEGIN 0 *//* USER CODE END 0 */UART_HandleTypeDefhuart1;/* USART1initfunction */voidMX_USART1_UART_Init(void){/* USER CODE BEGIN USART1_Init0 *//* USER CODE END USART1_Init0 *//* USER CODE BEGIN USART1_Init1 *//* USER CODE END USART1_Init1 */huart1.Instance USART1;huart1.Init.BaudRate 115200;huart1.Init.WordLength UART_WORDLENGTH_8B;huart1.Init.StopBits UART_STOPBITS_1;huart1.Init.Parity UART_PARITY_NONE;huart1.Init.Mode UART_MODE_TX_RX;huart1.Init.HwFlowCtl UART_HWCONTROL_NONE;huart1.Init.OverSampling UART_OVERSAMPLING_16;huart1.Init.OneBitSampling UART_ONE_BIT_SAMPLE_DISABLE;huart1.Init.ClockPrescaler UART_PRESCALER_DIV1;huart1.AdvancedInit.AdvFeatureInit UART_ADVFEATURE_NO_INIT;if(HAL_UART_Init(huart1) !HAL_OK){Error_Handler();}if(HAL_UARTEx_SetTxFifoThreshold(huart1, UART_TXFIFO_THRESHOLD_1_8) !HAL_OK){Error_Handler();}if(HAL_UARTEx_SetRxFifoThreshold(huart1, UART_RXFIFO_THRESHOLD_1_8) !HAL_OK){Error_Handler();}if(HAL_UARTEx_DisableFifoMode(huart1) !HAL_OK){Error_Handler();}/* USER CODE BEGIN USART1_Init2 *//* USER CODE END USART1_Init2 */}voidHAL_UART_MspInit(UART_HandleTypeDef* uartHandle){GPIO_InitTypeDefGPIO_InitStruct {0};RCC_PeriphCLKInitTypeDefPeriphClkInit {0};if(uartHandle-InstanceUSART1){/* USER CODE BEGIN USART1_MspInit 0 *//* USER CODE END USART1_MspInit 0 *//** Initializes the peripherals clock*/PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_USART1;PeriphClkInit.Usart1ClockSelection RCC_USART1CLKSOURCE_PCLK2;if(HAL_RCCEx_PeriphCLKConfig(PeriphClkInit) !HAL_OK){Error_Handler();}/* USART1 clock enable */__HAL_RCC_USART1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/**USART1 GPIO ConfigurationPA9 ------ USART1_TXPA10 ------ USART1_RX*/GPIO_InitStruct.Pin GPIO_PIN_9|GPIO_PIN_10;GPIO_InitStruct.Mode GPIO_MODE_AF_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate GPIO_AF7_USART1;HAL_GPIO_Init(GPIOA, GPIO_InitStruct);/* USER CODE BEGIN USART1_MspInit 1 *//* USER CODE END USART1_MspInit 1 */}}voidHAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle){if(uartHandle-InstanceUSART1){/* USER CODE BEGIN USART1_MspDeInit 0 *//* USER CODE END USART1_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_USART1_CLK_DISABLE();/**USART1 GPIO ConfigurationPA9 ------ USART1_TXPA10 ------ USART1_RX*/HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);/* USER CODE BEGIN USART1_MspDeInit 1 *//* USER CODE END USART1_MspDeInit 1 */}}/* USER CODE BEGIN 1 *//* 上面是自动生成的代码不许更改只需要添加下面代码就可以了 */#ifdef__GNUC__#definePUTCHAR_PROTOTYPEint__io_putchar(intch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endifPUTCHAR_PROTOTYPE{HAL_UART_Transmit(huart1,(uint8_t*)ch,1,0xFFFF);//阻塞方式打印returnch;}/* USER CODE END 1 */3、main.c函数在while函数中添加串口打印代码其他不需要修改#include main.h#include usart.h#include gpio.h/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/void SystemClock_Config(void);/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** brief The application entry point.* retval int*/int main(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */printf(Hello 21ic, Hello NUCLEO-U385RG-Q!\r\n);}/* USER CODE END 3 */}/*** brief System Clock Configuration* retval None*/void SystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct {0};RCC_ClkInitTypeDef RCC_ClkInitStruct {0};/** Configure the main internal regulator output voltage*/if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE2) ! HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_MSIS;RCC_OscInitStruct.MSISState RCC_MSI_ON;RCC_OscInitStruct.MSISSource RCC_MSI_RC0;RCC_OscInitStruct.MSISDiv RCC_MSI_DIV8;if (HAL_RCC_OscConfig(RCC_OscInitStruct) ! HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2|RCC_CLOCKTYPE_PCLK3;RCC_ClkInitStruct.SYSCLKSource RCC_SYSCLKSOURCE_MSIS;RCC_ClkInitStruct.AHBCLKDivider RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV1;RCC_ClkInitStruct.APB3CLKDivider RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_0) ! HAL_OK){Error_Handler();}}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** brief This function is executed in case of error occurrence.* retval None*/void Error_Handler(void){/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */}#ifdef USE_FULL_ASSERT/*** brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* param file: pointer to the source file name* param line: assert_param error line source number* retval None*/void assert_failed(uint8_t *file, uint32_t line){/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf(Wrong parameters value: file %s on line %d\r\n, file, line) *//* USER CODE END 6 */}#endif /* USE_FULL_ASSERT */四、将程序下载在开发板运行效果如下图致此串口打印实验结束这个还是比较简单的按流程来是没什么问题的。---------------------作者LiuDW091链接https://bbs.21ic.com/icview-3471392-1-1.html?_dsign92aa9953来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2609436.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!