当前位置: 首页 > 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]++;}
}


http://www.mrgr.cn/news/30525.html

相关文章:

  • Goland滑动窗口
  • Linux安装、Nginx反向代理、负载均衡学习
  • Linux 线程控制
  • 【分立元件】案例:新人加了个TVS管为什么可能导致系统不能正常工作
  • python 绘制 y=x^3 图像
  • 2024年华为杯广东工业大学程序设计竞赛 B.你是银狼(反悔贪心)
  • 我的创作纪念日-20240919
  • 基于三维地籍的全生命周期“一码管地”
  • 八股文-JVM
  • 828华为云征文|华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge
  • C++:布尔类型,引用,堆区空间
  • 基于224G的超高速以太网端口1.6Tbps 1600G真的来了~
  • 在CentOS上搭建NFS服务器
  • LCR 027
  • 圣多纳释放法,达到内心的平静
  • [2025]医院健康陪诊系统(源码+定制+服务)
  • 第三十五条:使用实例字段代替序号
  • 毕业论文写作会用到的AI软件!一定不能错过的18个网站!(务必收藏)
  • 单细胞代谢组学数据分析利器---SCMeTA
  • JavaDS —— 图