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


前言

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

一、printf 重定向

1.引入库

#include <stdio.h>

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 重定向 ,及串口接收函数的问题。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值