4915|5

1729

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

IAR FOR MSP430G2553 支持Printf函数 [复制链接]

前段时间用Keil的时候,用Printf这个函数的时候用的蛮好的。这两天在调MSP430的串口,突然想到这个,在网上搜了一大通,最后找到一个有用的。
Printf support for MSP430 CCSTUDIO compiler
  1. #include "msp430g2553.h"
  2. #include "UART.h"
  3. #include <stdio.h>
  4. #include <string.h>

  5. #define UART_PRINTF

  6. #ifdef UART_PRINTF
  7. int fputc(int _c, register FILE *_fp);
  8. int fputs(const char *_ptr, register FILE *_fp);
  9. #endif


  10. //------------------------------------------------------------------------------
  11. // Function configures Timer_A for full-duplex UART operation
  12. //------------------------------------------------------------------------------
  13. void UART_Init(void)
  14. {
  15.         P1DIR |= BIT1+BIT2;                        // P1.1 & P1.2 outputs
  16.         P1OUT &= 0xF9;                                // P1.1 & P1.2 reset
  17.         P1SEL |= BIT1+BIT2;                        // P1.1 = RXD, P1.2=TXD
  18.         P1SEL2 |= BIT1+BIT2;                     
  19.         UCA0CTL1 |= UCSSEL_2;                //选择系统时钟串口发生器时钟选择SMCLK

  20.         BCSCTL2 |= DIVS_0;                        //SMCLK不分频
  21.         UCA0BR0=0x08;                                  //波特率为115200  =1.047MHz/9  根据不同的芯片需要修改这个值
  22.         UCA0BR1=0;
  23.         UCA0MCTL=UCBRS_0+UCBRS_4+UCBRS_7;//
  24.         UCA0CTL1&=~UCSWRST;

  25.         IE2 |=UCA0RXIE;//开接收使能

  26. }
  27. //------------------------------------------------------------------------------
  28. // Outputs one byte using the Timer_A UART
  29. //------------------------------------------------------------------------------
  30. void PutChar(unsigned char byte)
  31. {
  32.         while (!(IFG2&UCA0TXIFG));        // USCI_A0 TX buffer ready?
  33.         UCA0TXBUF = byte;                        // TX -> RXed character
  34. }

  35. #ifdef UART_PRINTF
  36. int fputc(int _c, register FILE *_fp)
  37. {
  38.         while(!(IFG2&UCA0TXIFG));
  39.         UCA0TXBUF = (unsigned char) _c;

  40.         return((unsigned char)_c);
  41. }

  42. int fputs(const char *_ptr, register FILE *_fp)
  43. {
  44.         unsigned int i, len;

  45.         len = strlen(_ptr);

  46.         for(i=0 ; i<len ; i++)
  47.         {
  48.                 while(!(IFG2&UCA0TXIFG));
  49.                 UCA0TXBUF = (unsigned char) _ptr[i];
  50.         }

  51.         return len;
  52. }
  53. #endif
复制代码
以上是我的UART的程序,有串口初始化的程序。
时钟采用的是内部DCO,主频是1MHz。BRCLK选的是SMCLK,设置的波特率是115200。
在调用的地方包含下:
#include
#include

然后就可以直接调用printf这个函数了。
此时编译的时候还会出错,再按如下设置下你的工程,就可以了:

这样就可以完美的使用printf,这个函数了,跟以前学C的时候用法是一样的。

主题的名字也做了一些关键字,希望对大家有帮助吧。

最新回复

谢谢分享,继续学习!   详情 回复 发表于 2022-5-22 17:43

赞赏

2

查看全部赞赏

 
点赞 关注(3)

回复
举报

5

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
GOOD
 
 

回复

821

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
这个不错,研究一下。
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 
没找到 UART.H
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(中级)

5
 

請問可以提供  UART.h 嗎? 謝謝 !

 
 
 

回复

31

帖子

0

TA的资源

一粒金砂(中级)

6
 

谢谢分享,继续学习!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表