ADC、串口通信

一、ADC(模数转换)

把一个模拟的电压值转换为一个数字的值

二、串口通信

 串口通信:电脑与单片机之间实现单个字节传输的一个通信方式,与IIC不同的是,串口通信更偏向于与上位机通信,比如说和电脑通信。IIC侧重于与芯片外设去通信。

 发送数据和接受要通过中断来检验是否发完或者接受完数据

 在该工程文件中,和之前一样修改相应的地方,同时将myCode文件加入进来

发送

打开串口后,等待接收就好了。

接收

利用定时器进行串口不定长数据接收

第12界真题

串口接收的特点 

每接收一个数据时,都要让计数器清零,当接受最后一个数据时,进行判断,如果时间大于1.04ms,如果没有数据过来,就说明接收完毕。

 fun.c

#include "headfile.h"

uint8_t rec_data;
uint8_t rec_buff[20], count, rec_flag;
char send_buff[20]; //存储要发送的字符串

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance == USART1)
	{ 
		//HAL_UART_Transmit(huart, &rec_data, 1, 50);
		TIM4->CNT = 0;
	  rec_flag = 1;//接收标识符
		rec_buff[count] = rec_data; 
		count++;
		HAL_UART_Receive_IT(huart, &rec_data, 1); //将接收到的一段数据,1次存储一个数据到rec_data中
	}
}

void uart_data_rec()
{
	if(rec_flag == 1)
	{
		if(TIM4->CNT > 15)
		{
			if(rec_buff[0] == 'l' && rec_buff[1] == 'a' && rec_buff[2] == 'n')
			{
				sprintf(send_buff, "lan\r\n");
				HAL_UART_Transmit(&huart1, (uint8_t *)send_buff, sizeof(send_buff), 50);
			}
			else if(rec_buff[0] == 'q' && rec_buff[1] == 'i' && rec_buff[2] == 'a' && rec_buff[3] == 'o')
			{
				sprintf(send_buff, "qiao\r\n");
				HAL_UART_Transmit(&huart1, (uint8_t *)send_buff, sizeof(send_buff), 50);
			}
			else
			{
				sprintf(send_buff, "ERROR\r\n");
				HAL_UART_Transmit(&huart1, (uint8_t *)send_buff, sizeof(send_buff), 50);
			}
			rec_flag = 0;
			for(int i=0; i<count; i++) 
				rec_buff[i] = 0;
			count = 0;
		}			
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值