3

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);
}

PC でカウンターを表示するにはどうすればよいですか? 割り込みが与えられた回数を PuTTY で見たいです。UART を接続する必要がありますか、それとも印刷できますか?

4

2 に答える 2

3

最初に、この関数で使用する UART ハンドラーとその init を追加します。Stm32 キューブまたは IDE を使用する場合は、自動的に生成されるペリフを選択するだけで、UART2 を使用してペリフに変更します。

Printf と同じように動作する print 関数を使用するには、この関数を使用します。

#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 を忘れずに変更してください。

于 2020-08-21T21:34:04.870 に答える