简介
主要是用串口来添加打印信息,查看运行情况。源码是网上下载的。
可以实现用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的使用容量。