PUTCHAR 函数是通过它C通实现所有基于字符的I/O的基本函数 为了能使用
任何基于字符的I/O 用户必须利用硬件环境提供的工具 提供这两个函数的定义
创建新I/O子程序的起点是文件
C:\iar\icc430\putchar.c和C:\iar\icc430\getchar.c
1 定制putchar
创建定制putchar版本的步骤如下
对源文件putchar.c作所需的补充并把它保存回到相同名字下 或者把putchar.c用作
模板 创建用户自己的子程序
例如 下面的代码使用存储器映射I/O写到LCD显示
int putchar (int outchar)如上是MSP430系列C编译器编程指南_百度文库的内容。改写putchar的目的何在?
C:\Program Files\IAR Systems\Embedded Workbench Evaluation 4.0\430\src\lib\clib
#include <stdio.h>后,debug view->terminal IO直接看串口数据
然而,我想在串口调试助手里看数据,就是说想在电脑上看。
那么可以如下改造:
//重写putchar函数
//采用默认的,会在View/TerminalIO里有输出
//重写之后,会在真实的串口里显示。
//调用串口0实现。
int putchar(int ch)
{
TXBUF0 = ch;
while((UTCTL0&TXEPT)==0);//等待发送完毕
return ch;
}
保存为printf_redefine.c。
然后
#include <stdio.h>
#include "printf_redefine.c"
记得要初始化:
/* 为printf和getkey输入输出初始化串口 */
void mInitSTDIO( void )
{
/*
UCTL1&=~SWRST; //initialize USART state machine
UCTL1&=~SYNC; //UART模式
UCTL1|=CHAR; //8-Bit data,1-Bit stop,NO check
UBR01=0x03; //32768/9600~=3.413
UBR11=0x00;
UMCTL1=0x4A; //Modulation coefficient=0.413*8
UTCTL1|=SSEL0; //UCLK=ACLK=32768Hz
ME2|=URXE1+UTXE1; //enable USART0 RXD/TXD
P3SEL|=BIT6; //P3.4,P3.5为为功能模块
P3SEL|=BIT7;
P3DIR|=BIT6; //P3.4 for output
P3DIR&=~BIT7; //P3.5 for input
IE2|=URXIE1; //Enable USART1 RX interrupt
*/
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; //
UMCTL0 = 0x6B; // Modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0; // Enable USART0 RX interrupt
}
我的波特率是2400!
结论:terminalIO可以看数据中的汉字,也有乱码,勉强可以识别(比如读写U盘)
串口调试助手不行(应该是调试助手里没有汉字支持) |