当前位置: 首页 > news >正文

[STM32U3] 【每周分享】【STM32U385RG 测评】+调试串口通讯,字符串打印

接着上一回,这会进行串口打印实验
一、查询原理图,找到我们需要配置的串口


如上图:PA9、PA10、USART1
二、按流程打开IDE软件,建立新的工程文件。
配置如下:debug、RCC、USART1


配置完成后就可以生成代码了
三、代码修改
1、gpio.c不需要修改
#include"gpio.h"
voidMX_GPIO_Init(void)
{

/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();

}

2、USART.c需要在fputc里面的输出指向串口(重定向),代码如下
#include"usart.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->Instance==USART1)
{
/* 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 Configuration
PA9 ------> USART1_TX
PA10 ------> 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->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspDeInit 0 */

/* USER CODE END USART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART1_CLK_DISABLE();

/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> 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)
#endif


PUTCHAR_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?_dsign=92aa9953
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

http://www.jsqmd.com/news/809451/

相关文章:

  • 从百亿收购案看欧洲科技创业:贝叶斯统计与AI安全的应用
  • 代码生成器插件化架构:技能化设计与生态构建实践
  • PDF页眉页脚干扰知识图谱生成,彻底清除元数据污染的7种实战方案,含官方未公开API调用参数
  • 国内有哪些做市场调研的软件?专业市调工具与通用问卷平台的核心差异对比 - 品牌排行榜
  • 手把手教你绍兴黄金回收避坑,福正美实测推荐 - 福正美黄金回收
  • Hermes Agent工具接入Taotoken的配置要点与步骤
  • 2026年贵阳防雷检测与防雷工程:5大甲级资质权威机构深度横评与官方直达指南 - 企业名录优选推荐
  • 苹果手机扣图片换背景用什么工具?2026年最全实测对比指南
  • 用MATLAB复现烟花算法(FWA):从原理到代码的保姆级拆解(附官方源码)
  • 终极解决方案:开源项目全面解析如何高效解决Windows 10 PL2303驱动兼容性问题
  • 3步快速上手:用dupeGuru轻松清理重复文件,释放宝贵磁盘空间
  • Goose Skills:为AI编程助手注入108个增长与市场技能的开源工具包
  • 如何为 OpenClaw 配置 Taotoken 以实现高效 Agent 工作流
  • 终极指南:3步在Windows上实现AirPods完整功能体验
  • 北京电子车间洁净地坪施工哪家靠谱 - 中媒介
  • ComfyUI-WanVideoWrapper深度解析:解锁20+AI视频模型的实战指南
  • 2026 年行业真相:履职规范背后的管理秘密
  • 京东E卡回收渠道对比分析 - 抖抖收
  • 帮我找适合户外便携的高效能量补给饮品 - 中媒介
  • Linux中的开发工具
  • 北京昊泽鸿源文化传播:顺义活动舞台搭建哪家好 - LYL仔仔
  • 仅限内部技术白皮书流出:NotebookLM v2.3.1 PDF解析引擎底层架构图解(含PDF/A-3与Tagged PDF兼容性矩阵)
  • 如何永久免费使用AI编程神器:5个关键技巧与完整免费使用方案
  • 湖北推荐一家靠谱的天然草本饮品供应商 - 中媒介
  • ElevenLabs有声书交付失败率下降87%的关键动作:文本标准化模板(含标点停顿映射表)、语音一致性校验Checklist
  • 2026 苏州奢包回收行业测评:5 家主流平台综合评价 - 奢侈品回收测评
  • 选长续航的锂电割草机厂家 - 中媒介
  • 2026年贵阳防雷工程避坑指南:甲级资质机构如何精准识别雷电隐患 - 企业名录优选推荐
  • 2026喀什太阳能路灯采购指南:本地工厂直供vs外地品牌的终极对决 - 优质企业观察收录
  • Windows效率革命:PowerToys中文版终极指南,5分钟掌握系统优化神器