STM32f103C8T6入门学习记录(7)
4对第四章串口的补充
第四章介绍了串口的打印函数printf 是如何调用实现的。但要使用keil自带的微库microLIB ,那能不能不使用这个微库呢。我参照野火的教程,修改了程序,自己编写usart_printf()函数来实现打印的功能。
USRT1的配置不改变,主要的就是添加打印函数实现串口输出功能。代码感觉可能很长,但无非就是一些判断,看看字符串最后一位是不是\\0 ,很多时候我都没注意: 1、 这一句while ( *Data != 0) // 判断是否到达字符串结束符 我们平时不是都用 \\0 吗? 用0开始我还没反应过来。 其实ASCII的十六进制的0 就是\\0 如果要使用\\0,while ( *Data !='\\0') ,主要要加单引号表字符串,上面没有加就是十六进制,后面的也就能明白了。
2、stdarg.h这个函数,以前都没见过,但学习就是要学习新知识。 知识改变命运,我一直都相信这句!
3、char *itoa(int value, char *string, int radix) 是指针函数,返回值是一个地址
4、其他的都是涉及指针的操作,所以C指针一定要学好,没学好,不要紧,趁这个机会把它弄明白,当我看懂了下面这些,也就明白了。
usart_debug.h 文件修改:
#ifndef __usart_debug_H #define __usart_debug_H
#include \
#include
extern void usart_debug_config(void); //提供给外部函数调用usart_debug_config()函数。 /*
* 函数名:itoa
* 描述 :将整形数据转换成字符串
* 输入 :-radix =10 表示10进制,其他结果为0 * -value 要转换的整形数 * -buf 转换后的字符串 * -radix = 10 * 输出 :无 * 返回 :无
* 调用 :被USART1_printf()调用 */
static char *itoa(int value, char *string, int radix) {
int i, d; int flag = 0; char *ptr = string;
/* This implementation only works for decimal numbers. */ if (radix != 10) {
*ptr = 0; return string; }
if (!value) {
*ptr++ = 0x30; *ptr = 0; return string; }
/* if this is a negative value insert the minus sign. */ if (value < 0) {
*ptr++ = '-';
/* Make the value positive. */ value *= -1; }
for (i = 10000; i > 0; i /= 10) {
d = value / i;
if (d || flag) {
*ptr++ = (char)(d + 0x30); value -= (d * i); flag = 1; } }
/* Null terminate the string. */ *ptr = 0;
return string;
} /* NCL_Itoa */ /*
* 函数名:USART1_printf
* 描述 :格式化输出,类似于C库中的printf,但这里没有用到C库 * 输入 :-USARTx 串口通道,这里只用到了串口1,即USART1 * -Data 要发送到串口的内容的指针 * -... 其他参数 * 输出 :无 * 返回 :无
* 调用 :外部调用
* 典型应用USART1_printf( USART1, \ * USART1_printf( USART1, \ * USART1_printf( USART1, \ */
static void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...) { const char *s; int d; char buf[16];
va_list ap; // va_list ap 和 va_start(ap, Data)以及后面的va_arg() 都来自 stdarg.h va_start(ap, Data);//具体用法请参照相关资料。 while ( *Data != 0) // 判断是否到达字符串结束符 { if ( *Data == 0x5c ) // '\\' ASCII表 0x5c就是转义字符'\\' { switch ( *++Data ) { case 'r': //回车符 USART_ClearFlag(USART2,USART_FLAG_TC); USART_SendData(USARTx, 0x0d); while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); Data ++; break; case 'n': //换行符 USART_ClearFlag(USART2,USART_FLAG_TC); USART_SendData(USARTx, 0x0a); while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); Data ++; break;
default: Data ++; break; } } else if ( *Data == '%') { // switch ( *++Data ) { case 's': //字符串 s = va_arg(ap, const char *); for ( ; *s; s++) { USART_ClearFlag(USART2,USART_FLAG_TC); USART_SendData(USARTx,*s); while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); } Data++; break;
case 'd': //十进制 d = va_arg(ap, int); itoa(d, buf, 10);
for (s = buf; *s; s++) { USART_ClearFlag(USART2,USART_FLAG_TC); USART_SendData(USARTx,*s); while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); } Data++; break; default: Data++; break; } } /* end of else if */ else { USART_ClearFlag(USART2,USART_FLAG_TC); USART_SendData(USARTx, *Data++); while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); }
while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); } }
#endif /* __USART1_H */
软件仿真中的效果图:
波形图 IO口状态 串口输出 都在下面图里了
5工程代码
定时器中断 百度云盘:http://pan.http://m.wodefanwen.com//s/1bn6a9Ef 定时器中断带串口 百度云盘:http://pan.http://m.wodefanwen.com//s/1gdeifYF 野火串口工程 百度云盘:http://pan.http://m.wodefanwen.com//s/1pJobkWN 记于 2014年6月18日
…… 此处隐藏:1543字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




