本文目的
本文将记录如何在沁恒的ble芯片上修改printf的串口重定向,禁用,以及相关的注意事项
适用芯片
- CH579/ch578/ch577
- CH573/CH571
- CH581/CH582/CH583
SDK中 printf重定向实现原理
在keil中
在mounriver studio(eclipse+gcc)中
宏定义
官网的默认例程中,printf 通过PRINT宏来定义:
在CH573SFR.h文件中
#ifdef DEBUG
#define PRINT(X...) printf(X)
#else
#define PRINT(X...)
#endif
其中这个DEBUG 宏在IDE的全局定义中是:
初始化
在main函数中,上来进行串口初始化:
#ifdef DEBUG
GPIOA_SetBits(bTXD1);
GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
UART1_DefInit( );
#endif
串口输出
以下定义在文件"CH57x_sys.c"中
其中这里的Debug_UART0-Debug_UART3 对应就是0-3
#ifdef DEBUG
int _write(int fd, char *buf, int size)
{
int i;
for(i=0; i<size; i++)
{
#if DEBUG == Debug_UART0
while( R8_UART0_TFC == UART_FIFO_SIZE ); /* 等待数据发送 */
R8_UART0_THR = *buf++; /* 发送数据 */
#elif DEBUG == Debug_UART1
while( R8_UART1_TFC == UART_FIFO_SIZE ); /* 等待数据发送 */
R8_UART1_THR = *buf++; /* 发送数据 */
#elif DEBUG == Debug_UART2
while( R8_UART2_TFC == UART_FIFO_SIZE ); /* 等待数据发送 */
R8_UART2_THR = *buf++; /* 发送数据 */
#elif DEBUG == Debug_UART3
while( R8_UART3_TFC == UART_FIFO_SIZE ); /* 等待数据发送 */
R8_UART3_THR = *buf++; /* 发送数据 */
#endif
}
return size;
}
#endif