一、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;
}
}
}