挑战串口发送4--解决办法-enable disable

怎么办?
1没有找到__HAL_UART_CLEAR_IT那么蹩脚的用__HAL_UART_DISABLE_IT吧
2每次写的时候 也就是生产者的时候 启动它!
3每次回调函数过来的时候 就DISABLE_IT关闭它!

开始:
第一步:init的时候可以不要了!!
uint8_t GK_usart_init(GK_USARTBASE_TYPE *myuart,uint8_t usartid)
{
	switch(usartid)//绑定关系
	{
		case 1:myuart->huart=&huart1;break;
		case 2:myuart->huart=&huart2;break;
		default :return 0;	
	}
	HAL_UART_Receive_IT(myuart->huart, &myuart->one, 1);//开启中断接收 1个1个的接收
	__HAL_UART_ENABLE_IT(myuart->huart,UART_IT_IDLE);//开启空闲中断
	//__HAL_UART_ENABLE_IT(myuart->huart,UART_IT_TXE);//没有必要了!
	return 1;
}
第二部:写入
int fputc(int ch, FILE *f)//FILE 需要头文件 #include <stdio.h> 放在main.h去吧
{
    rbWrite(&pRbU1, (uint8_t *)&ch, 1);
    //HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1 , 0xffff); 
	__HAL_UART_ENABLE_IT(&huart1,UART_IT_TXE);	//=============开启
  	return ch;
}
第三步:读出
void GK_UART_TxIdleCallback(GK_USARTBASE_TYPE *myuart)
{
	uint8_t tmpLen = 0,tmpData=0;
	int32_t ret = 0;
	if(__HAL_UART_GET_IT(myuart->huart,UART_IT_TXE))
	{
		__HAL_UART_DISABLE_IT(myuart->huart,UART_IT_TXE);//============关闭
       tmpLen = rbCanRead(&pRbU1);
		if(0 == tmpLen)
		{
			return;
		}

		for(uint8_t i=0; i<tmpLen; i++)
		{
			ret = rbRead(&pRbU1, &tmpData, 1);
			if(0 != ret)
			{
						HAL_UART_Transmit(&huart1 , (uint8_t *)&tmpData, 1 , 0xffff); 
						while (huart1.gState != HAL_UART_STATE_READY);
			}
		}
	}
}

调用:
void USART1_IRQHandler(void)
{
	GK_UART_TxIdleCallback(&GKU1);
}

#include "ringBuffer.h"
rb_t pRbU1; 
uint8_t TXBUF[100];
void TXFIFOInit(void)
{    
    pRbU1.rbCapacity = 100;
    pRbU1.rbBuff = TXBUF;
    if(0 == rbCreate(&pRbU1))
	{
		printf("rbCreate Success \n");
	}
	else
	{
		printf("rbCreate Faild \n");
	}
}


注意:在初始化之前 不要printf!!!!!
成功完成了 异步printf 用到了FIFO 没有用OS的任务!

$ git remote -v
origin  git@gitee.com:GKoSon/STM32USARTMODE.git (fetch)
origin  git@gitee.com:GKoSon/STM32USARTMODE.git (push)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值