stm8L052R8T6串口实现打印信息(无中断)

stm8L052R8T6串口使用(无中断)

简介

主要是用串口来添加打印信息,查看运行情况。源码是网上下载的。
可以实现用printf函数来输出一些信息。

IAR设置

在这里插入图片描述
在这里插入图片描述

USART.c

#include "uart3.h"

#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)

/* USART configured as follow:
      - BaudRate = 115200 baud  
      - Word Length = 8 Bits
      - One Stop Bit
      - No parity
      - Receive and transmit enabled
      - USART Clock disabled
*/
//此处将串口改为你使用的串口即可,波特率也可以改
void uart3_init(void){
  CLK_PeripheralClockConfig (CLK_Peripheral_USART3, ENABLE);
  USART_Init(USART3, (uint32_t)2400, USART_WordLength_8b, USART_StopBits_1,
                   USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Tx | USART_Mode_Rx));
   USART_Cmd (USART3,ENABLE);
}


/**
  * @brief Retargets the C library printf function to the USART.
  * @param[in] c Character to send
  * @retval char Character sent
  * @par Required preconditions:
  * - None
  */
PUTCHAR_PROTOTYPE
{
  /* Write a character to the USART */
  USART_SendData8(USART3, c);
  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);

  return (c);
}
/**
  * @brief Retargets the C library scanf function to the USART.
  * @param[in] None
  * @retval char Character to Read
  * @par Required preconditions:
  * - None
  */
GETCHAR_PROTOTYPE
{
  int c = 0;
  /* Loop until the Read data register flag is SET */
  while (USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET);
    c = USART_ReceiveData8(USART3);
    return (c);
  }
  
//此处为自己添加,如果只需要打印字符串的话可以使用这个函数
//如果有其他需求就使用printf函数,用法同C语言
void mprint(char* arr){
#if DEBUG
  printf(arr);
#endif
}

}

USART.h

#ifndef __UART3_H
#define __UART3_H

#include "stm8l15x.h"
#include "stdio.h"

#define DEBUG 1

void mprint(char* arr);
void uart3_init(void);

#endif

main.c

#include "stm8l15x_clk.h"
#include "main.h"
#include "LCD.h"
#include "uart3.h"
#include "key.h"
#include "motor.h"


void main(){
  CLK_HSICmd(ENABLE);   //时钟初始化
  key_Init();           //按键初始化
  motor_Init();         //电机初始化
  uart3_gpio_init();    //串口初始化
  LCD_GLASS_Init();
  LCD_Display(1,1);
  for(;;){
    printf("abcd\n");
  } 
}

结果如图

串口打印信息
单片机会不断打印abcd
右边的设置信息和程序里面要保持一致,不然会乱码。

总结

这样的话可以在关键地方添加打印信息,运行出问题的时候打印出来就可以知道错误大概在什么位置了。但是会增加几KB的使用容量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值