【STM32H7S78-DK测评】期待的串口打印来了
【STM32H7S78-DK测评】期待的串口打印来了串口在嵌入式工程师眼中的地位非常高,高到拿到开发板后搭建好开发环境后必先要实现之。作为一名嵌入式工程师的我,我也要在第一时间实现串口打印用来调试程序。
在之前的开发板上,调试器只负责调试而无串口,而现在的STM32H7S78上板载的ST-Link v3自带有虚拟串口功能,我们本次也是使用这个虚拟串口来实现调试信息的输出打印。
可以看到连接到了PD0引脚和PD1引脚。阅读datasheet后,可以看到ST-Link的VCP连接到了STM32H7RS的uart4外设上。于是,我们通过STM32CubeMX来配置并生成外设驱动代码。
/**
* @brief UART MSP Initialization
* This function configures the hardware resources used in this example
* @param huart: UART handle pointer
* @retval None
*/
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
if(huart->Instance==UART4)
{
/* USER CODE BEGIN UART4_MspInit 0 */
/* USER CODE END UART4_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART234578;
PeriphClkInit.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
/* Peripheral clock enable */
__HAL_RCC_UART4_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/**UART4 GPIO Configuration
PD1 ------> UART4_TX
PD0 ------> UART4_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/* USER CODE BEGIN UART4_MspInit 1 */
/* USER CODE END UART4_MspInit 1 */
}
}
/**
* @brief UART MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param huart: UART handle pointer
* @retval None
*/
void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{
if(huart->Instance==UART4)
{
/* USER CODE BEGIN UART4_MspDeInit 0 */
/* USER CODE END UART4_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_UART4_CLK_DISABLE();
/**UART4 GPIO Configuration
PD1 ------> UART4_TX
PD0 ------> UART4_RX
*/
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_1|GPIO_PIN_0);
/* USER CODE BEGIN UART4_MspDeInit 1 */
/* USER CODE END UART4_MspDeInit 1 */
}
}
int main(void)
{
/* USER CODE BEGIN 1 */
static uint8_t led_state = 0;
MPU_Config();
/* USER CODE END 1 */
/* Enable the CPU Cache */
/* Enable I-Cache---------------------------------------------------------*/
SCB_EnableICache();
/* Enable D-Cache---------------------------------------------------------*/
SCB_EnableDCache();
/* MCU Configuration--------------------------------------------------------*/
/* Update SystemCoreClock variable according to RCC registers values. */
SystemCoreClockUpdate();
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_UART4_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 */
switch (led_state) {
case 0: {
HAL_GPIO_WritePin(GPIOO, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOO, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOM, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOM, GPIO_PIN_3, GPIO_PIN_SET);
led_state = 1;
HAL_UART_Transmit(&huart4, hello_str, sizeof(hello_str) - 1, 1000);
break;
}
case 1: {
HAL_GPIO_WritePin(GPIOO, GPIO_PIN_1, GPIO_PIN_SET);
led_state = 2;
break;
}
case 2: {
HAL_GPIO_WritePin(GPIOO, GPIO_PIN_5, GPIO_PIN_SET);
led_state = 3;
break;
}
case 3: {
HAL_GPIO_WritePin(GPIOM, GPIO_PIN_2, GPIO_PIN_RESET);
led_state = 4;
break;
}
case 4: {
HAL_GPIO_WritePin(GPIOM, GPIO_PIN_3, GPIO_PIN_RESET);
led_state = 0;
break;
}
}
HAL_Delay(200);
}
/* USER CODE END 3 */
}
之后,代码就没有什么难度了!调用一下HAL_Uart_Transmin()即可。效果如下所示:
至此,我们的基础环境实验环节就结束了。接下来,我们也就开始了更高阶的实验了。
有没有处理ORE错误?不然会有问题 Amazingxixixi 发表于 2024-10-31 16:20
有没有处理ORE错误?不然会有问题
您这不会是小号练级吧!
程序用操作系统了没?是不是跑裸机 地瓜patch 发表于 2024-10-31 18:52
程序用操作系统了没?是不是跑裸机
惭愧呀!
现在是前后机跑的。这个月底会实现FreeRTOS的实现方案
通过HAL库的HAL_UART_Transmit函数发送字符串。 对于STM32H7S78这样的开发板,利用板载的ST-Link v3的虚拟串口功能来实现串口打印是一个非常便捷和高效的方法。 可以直接通过USB接口与开发板进行串口通信,而无需额外的串口硬件。 串口打印提供了一种简单而有效的方式来查看程序的运行状态、变量的值和错误信息等,这对于快速定位和解决问题至关重要。 实现一个串口打印函数,如USART_Print,该函数接受一个字符串作为参数,并通过USART发送出去。 嵌入式代码中,使用HAL库或LL库提供的UART函数来发送数据。 在STM32H7S78的应用程序中编写代码,使用串口发送函数(如HAL_UART_Transmit)发送调试信息。 ST-Link v3的虚拟串口功能,可以非常方便地实现串口打印,这对于嵌入式开发的调试和监控至关重要。 串口通信所需的硬件资源少,只需要几根线(TXD、RXD、GND)即可实现通信。
无需额外的专用芯片或复杂的电路设计。 串口打印提供了一种简单而有效的方式来查看程序的运行状态、变量的值和错误信息等,这对于快速定位和解决问题至关重要。 串口打印在嵌入式开发中的确占据着举足轻重的地位。它是嵌入式系统中最基本的调试手段之一,允许开发者将系统状态、变量值、错误信息等输出到终端,以便于观察和调试程序。 大多数微控制器都内置了串口模块,配置和使用都非常方便。 使用STM32CubeMX或类似的工具来配置UART外设。您需要设置波特率、数据位、停止位和校验位等参数。 对于嵌入式工程师来说是一项非常有用的技能,能够极大地提高开发效率和问题解决速度。 串口通信在嵌入式系统开发中确实占据着非常重要的地位
页:
[1]
2