使用 PuTTY 从 STM32 打印
Using PuTTY to print from STM32
我想打印来自我的 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 还是可以打印?
您可以在 Nucleo 上使用 UART
所有 Nucleo 开发板都有一个内置的 UART 转 USB 模块,可以自动将数据传输到计算机上的串行端口。如果在 windows,打开你的控制面板,转到设备管理器,在 COM 端口下你应该看到你的 Nucleo。
初始化UART外设
参考您的 Nucleo 用户手册以查看哪些 UART 引脚连接到 USB 端口(STM32CubeMX 可能已经映射了这些)。
外设初始化的时候,select波特率9600之类的,记住了
配置腻子
输入 Nucleo 的 COM 端口和您之前 select 编辑的波特率,以及 select Serial 作为传输方法。如果启用了某些硬件流控制选项,您可能必须禁用它们
传输代码
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);
首先在此函数中添加使用 UART 处理程序及其初始化我使用 UART2 将其更改为您的外设如果您使用 Stm32 Cube 或 IDE 只是 select 它是自动生成的外设。
使用这个函数来使用打印函数,它的作用与 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);
}
在您的计数器函数中,只需将 printf 更改为 printmsg
int counter()
{
int i;
i = 0;
i++;
printmsg("/n %d", i);
}
记得更改 Printmsg uart Handler 。
我想打印来自我的 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 还是可以打印?
您可以在 Nucleo 上使用 UART
所有 Nucleo 开发板都有一个内置的 UART 转 USB 模块,可以自动将数据传输到计算机上的串行端口。如果在 windows,打开你的控制面板,转到设备管理器,在 COM 端口下你应该看到你的 Nucleo。
初始化UART外设
参考您的 Nucleo 用户手册以查看哪些 UART 引脚连接到 USB 端口(STM32CubeMX 可能已经映射了这些)。
外设初始化的时候,select波特率9600之类的,记住了
配置腻子
输入 Nucleo 的 COM 端口和您之前 select 编辑的波特率,以及 select Serial 作为传输方法。如果启用了某些硬件流控制选项,您可能必须禁用它们
传输代码
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);
首先在此函数中添加使用 UART 处理程序及其初始化我使用 UART2 将其更改为您的外设如果您使用 Stm32 Cube 或 IDE 只是 select 它是自动生成的外设。
使用这个函数来使用打印函数,它的作用与 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);
}
在您的计数器函数中,只需将 printf 更改为 printmsg
int counter()
{
int i;
i = 0;
i++;
printmsg("/n %d", i);
}
记得更改 Printmsg uart Handler 。