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

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;
}
#endif


void 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; //9600
	UBRR1H = (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]++;
    }
}


http://www.kler.cn/news/311087.html

相关文章:

  • Redis实现发布/订阅功能(实战篇)
  • uniapp中实现<text>文本内容点击可复制或拨打电话
  • tronado websocket
  • Java基础:Api 文档注释,字符串种类,String字符串创建,特点及常用方法
  • 【洛谷】P1546 [USACO3.1] 最短网络 Agri-Net 的题解
  • SqlServer自定义类型的使用
  • 【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
  • 无人机滑环的核心特点及其应用分析
  • [论文笔记] LLM端侧小模型篇——1、剪枝量化的latency
  • MySQl篇(基本介绍)(持续更新迭代)
  • Leetcode—删除有序数组的重复项
  • 408算法题leetcode--第七天
  • Llama 3.1 大模型指令微调提升中文能力
  • 【系统架构设计师-2019年真题】案例分析-答案及详解
  • Scikit-learn 学习笔记
  • 尚品汇-秒杀商品存入缓存、Redis发布订阅实现状态位(五十一)
  • 全球首个!复旦大学冯建峰团队开发数字孪生脑平台,具备 860 亿神经元规模
  • 旷视轻量化网络shufflenet算法解读
  • MySQL——数据库的高级操作(二)用户管理(3)删除普通用户
  • 机器学习1--概述
  • Linux创建虚拟磁盘并分区格式化
  • 「Netmarble 小镇」活动来了:踏上穿越标志性世界的旅程!
  • OpenHarmony鸿蒙( Beta5.0)智能门铃开发实践
  • Unity-Transform-坐标转换
  • k8s环境下的相关操作
  • (SERIES12)DM性能优化
  • Bandicam简体中文版下载与安装百度网盘资源
  • 多路径文件批量下载工具V1.0.3-支持批量下载文件到单独文件夹的工具-供大家学习研究参考
  • 攻防世界——simple_php(NO.GFSJ0485)
  • pikachu下