来源:ST25官方代码printf
C:\Desktop\en.ST25R3911_Discovery_FW\ST25R3911B_DISCO_FW_v1_2_8\common\STM32\Src
#include "logger.h"
#include "st_errno.h"
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
int logUsart(const char* format, ...)
{
#define LOG_BUFFER_SIZE 256
char buf[LOG_BUFFER_SIZE];
va_list argptr;
va_start(argptr, format);
int cnt = vsnprintf(buf, LOG_BUFFER_SIZE, format, argptr);
va_end(argptr);
/* */
logUsartTx((uint8_t*)buf, strlen(buf));
return cnt;
}
#define USART_TIMEOUT 1000
UART_HandleTypeDef *pLogUsart = 0;
void logUsartInit(UART_HandleTypeDef *husart)
{
pLogUsart = husart;
}
uint8_t logUsartTx(uint8_t *data, uint16_t dataLen)
{
if(pLogUsart == 0)
return ERR_INVALID_HANDLE;
return HAL_UART_Transmit(pLogUsart, data, dataLen, USART_TIMEOUT);
}
++++++补充dialog我们的代码++++++++++++
#define DEBUG_MODE 1 -------------------------
//#define CFG_PRINTF --------------------------
#ifdef CFG_PRINTF
#define CFG_PRINTF_UART2
#endif
修改上面2个地方 打开debug
#if DEBUG_MODE
#define SHOWME mc_debug("\r\n\r\n[ %s------%d ]\r\n\r\n",__FUNCTION__,__LINE__)
#define mc_debug(...) do { \
mcube_printf(__VA_ARGS__); \
} while (0);
#define mc_debug_num(dec) do { \
mcube_num_printf(dec); \
} while (0);
#define mc_debug_byte(ch) do { \
mcube_ch_printf(ch); \
} while (0);
#define mc_debug_4hex(hex) \
do { \
mcube_4hex_printf(hex); \
} while (0);
#else
#define mc_debug(...)
#define mc_debug_num(...)
#define mc_debug_byte(...)
#define mc_debug_4hex(...)
#endif
int logUsart(const char* format, ...)
{
#define LOG_BUFFER_SIZE 256
char buf[LOG_BUFFER_SIZE];
va_list argptr;
va_start(argptr, format);
int cnt = vsnprintf(buf, LOG_BUFFER_SIZE, format, argptr);
va_end(argptr);
/* */
//logUsartTx((uint8_t*)buf, strlen(buf));
uart_send(UART2, (uint8_t *) buf, strlen(buf), UART_OP_BLOCKING);
return cnt;
}
void mcube_printf(char *format, ...)
{
// String only!!
#if defined (CFG_PRINTF_UART2)
// printf_string(UART2, format);
// https://blog.youkuaiyun.com/weixin_42381351/article/details/89736990?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162035486116780271561289%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162035486116780271561289&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-7-89736990.pc_search_result_hbase_insert&utm_term=printf+gkoson
logUsart(format);
#endif
}
小结
当前代码
#define mc_debug(...) do { \
mcube_printf(__VA_ARGS__); \
} while (0);
void mcube_printf(char *format, ...)
{
// String only!!
#if defined (CFG_PRINTF_UART2)
printf_string(UART2, format);
#endif
}
测试效果是:
mc_debug("\r\n3------------------------m_ble_rx_tx_ntf_cfg_ind_hndl[%d ble_mode]",_ble_mode);
3------------------------m_ble_rx_tx_ntf_cfg_ind_hndl[%d ble_mode]
没有完成正常的printf
修改:
#if 0
void mcube_printf(char *format, ...)
{
// String only!!
#if defined (CFG_PRINTF_UART2)
printf_string(UART2, format);
#endif
}
#else
int logUsart(const char* format, ...)
{
#define LOG_BUFFER_SIZE 256
char buf[LOG_BUFFER_SIZE];
va_list argptr;
va_start(argptr, format);
int cnt = vsnprintf(buf, LOG_BUFFER_SIZE, format, argptr);
va_end(argptr);
/* */
//logUsartTx((uint8_t*)buf, strlen(buf));
uart_send(UART2, (uint8_t *) buf, strlen(buf), UART_OP_BLOCKING);
return cnt;
}
void mcube_printf(char *format, ...)
{
// String only!!
#if defined (CFG_PRINTF_UART2)
// printf_string(UART2, format);
// https://blog.youkuaiyun.com/weixin_42381351/article/details/89736990?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162035486116780271561289%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162035486116780271561289&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-7-89736990.pc_search_result_hbase_insert&utm_term=printf+gkoson
logUsart(format);
#endif
}
#endif