栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【APT32F102 学习记录之printf 重定向】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【APT32F102 学习记录之printf 重定向】

APT32F102 学习记录
  • 前言
  • 一、printf 重定向
    • 1.引入库
    • 2.main.c 文件添加 fputc 函数,实现printf
  • 二、问题
    • 1.读取串口数据,在中断函数中使用,会导致 程序死机
      • (1) UART_ReturnRxByte(UART0); //中断 读取 会导致死机
      • (2)原因
  • 总结


前言

首次接触RISC-V CPU内核芯片,特作此博客记录。
芯片:APT32F1023是由爱普特微电子推出的基于RISC-V CPU内核开发的32位高性能高可靠性单片机。

一、printf 重定向 1.引入库
#include 
2.main.c 文件添加 fputc 函数,实现printf
 // 发送数据 
int fputc(int ch, FILE *f) 
{ 
	UARTTxByte (UART1,ch); //发送 
	return (ch); 
}
二、问题 1.读取串口数据,在中断函数中使用,会导致 程序死机 (1) UART_ReturnRxByte(UART0); //中断 读取 会导致死机
//UART0 Interrupt
//EntryParameter:NONE
//ReturnValue:NONE

void UART0IntHandler(void) 
{
   // ISR content ...
   if ((UART0->ISR&UART_RX_INT_S)==UART_RX_INT_S)				//RX interrupt
   {
   	UART0->ISR=UART_RX_INT_S;
   	RxDataFlag = TRUE;	
   	//char uart_data =  UART_ReturnRxByte(UART0);  //中断 读取 会导致死机
   	//uart0_rx_buff_write(uart_data);  
   }
   else if( (UART0->ISR&UART_TX_INT_S)==UART_TX_INT_S ) 		//TX interrupt
   {
   	UART0->ISR=UART_TX_INT_S;
   	TxDataFlag = TRUE;
   }
   else if ((UART0->ISR&UART_RX_IOV_S)==UART_RX_IOV_S)			//RX overrun interrupt
   {
   	UART0->ISR=UART_RX_IOV_S;
   }
   else if ((UART0->ISR&UART_TX_IOV_S)==UART_TX_IOV_S)			//TX overrun interrupt
   {
   	UART0->ISR=UART_TX_IOV_S;
   }
}
//UART RX Return Byte 
//EntryParameter:UART0,UART1,UART2
//ReturnValue:(uart)->DATA

U8_T UART_ReturnRxByte(CSP_UART_T *uart)
{
	RxDataFlag = FALSE;
	while(RxDataFlag != TRUE);
	return CSP_UART_GET_DATA(uart);
}
(2)原因

RxDataFlag 在中断中设置 TRUE,进入 UART_ReturnRxByte(UART0) 中,又设置为FALSE,在while(RxDataFlag != TRUE); 位置,一直等待。
修改 串口接收函数 U8_T UART_ReturnRxByte(CSP_UART_T *uart)

//UART RX Return Byte  UART RX返回字节
//EntryParameter:UART0,UART1,UART2
//ReturnValue:(uart)->DATA

U8_T UART_ReturnRxByte(CSP_UART_T *uart)
{
	//RxDataFlag = FALSE;
	//while(RxDataFlag != TRUE);
	return CSP_UART_GET_DATA(uart);
}
总结

以上就是今天要讲的内容,本文仅仅简单介绍了APT 串口 printf 重定向 ,及串口接收函数的问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号