中断接收串口数据
1.随便一个文件下边
uint8_t box[1] = {0};//中断接收扫描的直接得到的数据
uint8_t Rbox[29] = {0};//Rbox里面有几个数据就看你要每次接收几个元素
uint8_t Flagg = 0;
//使用串口1,PB6(TX),PB7(RX)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//Sept 2: 中断回调函数,执行:接受到东西后,就进入该函数
{
static uint8_t Count = 0;
if(huart->Instance==USART1) //因此此处需要认一下是哪个串口收到数据
{
HAL_UART_Receive_IT(&huart1,(uint8_t *)box,1);//这里是把接受到的东西放入数组box里
Flagg = 0 ;
Rbox[Count] = box[0];//box直接从底层接收数据,每次一个元素,在这里送给Rbox
switch(Rbox[0])//以下只是一个简单的状态机验证
{
case 0x54:
{
Count ++;
if(Count == 29)
{
Count = 0 ;
if(Rbox[28] == 0x0A)
{
Flagg = 1;
break;
}
}
else break;
}
}
if(Flagg == 1)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_15); //点灯验证
Flagg = 0;//标志位清0
}
HAL_UART_Receive_IT (&huart1 , box , 1); //再次打开中断,因为单片机每执行一次中断回调函数,就默认下一次不再执行,这里的1是每次接收1个数据
}
}
2.主函数里加这一句提前打开(必须加)
HAL_UART_Receive_IT(&huart1, (uint8_t *)&box, 1);
串口数据发送
1.定义一个数组
uint8_t UART_BUF[12] = "you press A!";
2.数据发送函数
HAL_UART_Transmit(&huart1,(uint8_t *)UART_BUF,sizeof(UART_BUF),100);
串口重映射
1.配置
2.添加头文件
#include "stdio.h"
3.实现代码
int fputc(int ch,FILE *p)
{
HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xffff);
return ch;
}