使用 PuTTY 从 STM32 打印

Posted

技术标签:

【中文标题】使用 PuTTY 从 STM32 打印【英文标题】:Using PuTTY to print from STM32 【发布时间】:2019-02-22 10:33:41 【问题描述】:

我想从我的 STM32 Nucleo-L073RZ 微控制器打印消息。我应该怎么做? 我应该使用UART吗?在哪里可以得到对应的代码?

#include "stm32l0xx.h"
#include "stm32l0xx_nucleo.h"
#include "stm32l0xx_hal.h"
#include "stdio.h"

static void GPIO_Init (void);
static void UART_Init (void);

int main(void)

HAL_Init();
GPIO_Init();
printf("Hello");
while(1)






static void GPIO_Init(void)

BSP_LED_Init(LED2);
BSP_LED_On(LED2);

GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE();


/*Configure GPIO pin : PA13*/
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);

/*Uart Init Function*/
static void UART_Init(void)




void EXTI4_15_IRQHandler(void)

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
 

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_PIN)

BSP_LED_Toggle(LED2);
counter();


int counter()

int i;
i = 0;
i++;
printf("/n %d", i);

如何在我的电脑上显示计数器?我希望在 PuTTY 上看到中断的次数。我应该连接 UART 还是可以打印?

【问题讨论】:

是的,使用 UART。 CUBE L0 zip 文件中有大量示例。 (不是 cube mx,虽然我确信里面也有东西)。 【参考方案1】:

您可以在 Nucleo 上使用 UART

所有 Nucleo 板都有一个内置的 UART 转 USB 模块,可自动将数据传输到计算机上的串行端口。如果在 Windows 上,打开你的控制面板,进入设备管理器,在 COM 端口下你应该会看到你的 Nucleo。

初始化 UART 外设

参考您的 Nucleo 用户手册,查看哪些 UART 引脚连接到 USB 端口(STM32CubeMX 可能已经映射了这些引脚)。

初始化外设的时候,选择9600这样的波特率,记住

配置 PuTTy

输入您之前选择的 Nucleo 的 COM 端口和波特率,然后选择串行作为传输方式。如果启用了某些硬件流控制选项,您可能必须禁用它们

要传输的代码

HAL 具有通过 UART 传输的功能。类似 HAL_UART_Transmit(...) 的东西。您必须查看如何具体使用该功能,那里有很多很棒的教程。

我个人使用sprintf 在 UART 上打印格式良好的字符串,如下所示:

char buf[64];
sprintf(buf, "Value of counter: %d\r\n", i);

// change huartX to your initialized HAL UART peripheral
HAL_UART_Transmit(&huartX, buf, strlen(buf), HAL_MAX_DELAY);

【讨论】:

我添加了 USB 端口初始化以及 USART 初始化。有效。谢谢!【参考方案2】:

首先在这个函数中添加使用UART处理程序及其初始化,如果你使用Stm32 Cube或IDE,我使用UART2将其更改为你的外围设备,只需选择它自动生成的外围设备。

使用此函数来使用打印功能,它的作用与 Printf 相同。

#include <stdint.h>
#include <stdarg.h>    

void printmsg(char *format,...) 
    char str[80];

    /*Extract the the argument list using VA apis */
    va_list args;
    va_start(args, format);
    vsprintf(str, format,args);
    HAL_UART_Transmit(&huart2,(uint8_t *)str, strlen(str),HAL_MAX_DELAY);
    va_end(args);

在您的 Counter 函数中,只需将 printf 更改为 printmsg

int counter()

    int i;
    i = 0;
    i++;
    printmsg("/n %d", i);
 

记得更改 Printmsg uart Handler 。

【讨论】:

以上是关于使用 PuTTY 从 STM32 打印的主要内容,如果未能解决你的问题,请参考以下文章

Qt Serial Communictaion - 通过 Putty 与 stm32f0 板通信

使用STM32 Nucleo将数据打印到文件中

STM32F4-Discovery Board:在 PC 屏幕上从连接的传感器打印数据

STM32串口打印的那些知识

STM32串口打印的那些知识

USART1 没有为 Nucleo F411RE 提供任何 Putty 输出