当前位置: 首页 > news >正文

microchip中使用printf给AVR单片机串口重定向

 

 重定向中修改需要的串口

#ifndef USART1_H_
#define USART1_H_#ifndef F_CPU
#define  F_CPU 11059200UL
#endif
#define  BAUDRATE    9600
#include <avr/io.h>
#include <avr/interrupt.h>#include <stdio.h>
#include <string.h>#define PRINT
/*
* printf 重定向初始化串口后需要执行  stdout = &mystdout;
*/
#ifdef PRINT
static int uart_putchar(char c, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,_FDEV_SETUP_WRITE);
static int uart_putchar(char c, FILE *stream)  //自定义的putchar
{while(!(UCSR1A&0x20)); UDR1 = c;return 0;
}
#endifvoid init_USART1( void );			 // USART1 初始化
void usart1_send(uint8_t data);       // 发送采用查询方式,发送一个字节
void usart1_s(char * data);           // 发送字符串
void usart1_send_array(uint8_t send_array[],uint8_t num);#endif /* USART1_H_ */

 初始化中一定要加入stdout = &mystdout;

#include <usart1.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>void  init_USART1( void ) // USART1 初始化
{stdout = &mystdout;UCSR1B = 0x00;    // 禁止发送器和接收器,禁止串口中断UCSR1A = 0x00;	  // 各标志位清零UCSR1C = (1<<UCSZ10)|(1<<UCSZ11);	   //写 ,异步,8位数据,无奇偶校验,一个停止位,无倍速UBRR1L = (F_CPU/BAUDRATE/16-1)%256; //9600UBRR1H = (F_CPU/BAUDRATE/16-1)/256;UCSR1B = (1<<TXEN1)|(1<<RXEN1)|(1<<RXCIE1);    // 使能发送 ,使能接收,使能接收中断sei();
}
void usart1_send(uint8_t data)
{while(!(UCSR1A&(1<<UDRE1))); //第五位是否为1,从而满足条件退出循环发送数据UDR1=data;while(!(UCSR1A&(1<<TXC1)));UCSR1A|=(1<<TXC1); //写1进行清除操作
}void usart1_s(char * data)   //发送字符串
{while (*data){usart1_send(*data++);}
}
void usart1_send_array(uint8_t send_array[],uint8_t num) //两个参数 一是数组(的数据) 二是数组长度1-255
{//串口发送uint8_t i=0;  //定义一个局部变量  用来 发送字符串 ++运算while(i<num){usart1_send(send_array[i]); // 发送数据i++;  //值 加一}
}
int main(void)
{/* Replace with your application code */wdt_enable(WDTO_1S);        // 启动看门狗,1s一次init_USART1();				// USART1 初始化while (1) {wdt_reset();            // 喂狗printf("page2.t3.txt=\"%d\"\xff\xff\xff",P1[0]);P1[0]++;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 轴承表面缺陷检测系统源码分享
  • 医院用餐人次查询表——智慧大屏幕————未来之窗行业应用跨平台架构
  • Ansible——Playbook基本功能???
  • Python编码系列—Python团队开发工作流:高效协作的艺术
  • (黑马点评)二、短信登录功能实现
  • 黑神话悟空mac可以玩吗
  • 人类行为识别系统源码分享
  • Python学习——【2.1】if语句相关语法
  • vue3 生命周期,代码说明
  • Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)
  • 达梦数据库导入xml迁移到达梦数据库大文件导致中断问题解决方案记录?
  • keep-alive原理
  • Linux:进程(二)
  • GitLab权限及设置
  • 使用rust自制操作系统内核
  • 【Amaple教程】5. 插件
  • 【面试系列】之二:关于js原型
  • ES6--对象的扩展
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java面向对象及其三大特征
  • JS 面试题总结
  • js如何打印object对象
  • leetcode-27. Remove Element
  • PHP 小技巧
  • Redis在Web项目中的应用与实践
  • TypeScript迭代器
  • TypeScript实现数据结构(一)栈,队列,链表
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 检测对象或数组
  • 前端性能优化——回流与重绘
  • 突破自己的技术思维
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 硬币翻转问题,区间操作
  • 湖北分布式智能数据采集方法有哪些?
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​Java并发新构件之Exchanger
  • ​VRRP 虚拟路由冗余协议(华为)
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #前后端分离# 头条发布系统
  • (13):Silverlight 2 数据与通信之WebRequest
  • (33)STM32——485实验笔记
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (MATLAB)第五章-矩阵运算
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)linux文件内容查看
  • (自用)交互协议设计——protobuf序列化
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .chm格式文件如何阅读
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net IOC框架入门之一 Unity
  • .net开发日常笔记(持续更新)
  • .NET是什么
  • .Net小白的大学四年,内含面经