蓝桥杯嵌入式入门指南-UART【7】


在all.c定义缓存变量

c 复制代码
char uart_tx[50];//uart缓冲区
char uart_rx[50];//uart缓冲区

USRT发送(使用strlen时需要在all.h添加string.h)

c 复制代码
	sprintf(uart_tx ,"  PB15:%.4f V  \r\n  ",adc_data_PB15);
	HAL_UART_Transmit(&huart1,(uint8_t *)uart_tx,strlen(uart_tx),50);//串口名字 数据 长度 发送间隔

UART接收(接收时需要在setup()中打开)

c 复制代码
	HAL_UARTEx_ReceiveToIdle_IT(&huart1 ,(uint8_t *)uart_rx,50);//用一次关一次,需要重新打开

当收到串口收到hello,屏幕打印"World!"

c 复制代码
//UART接受
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)//串口接收到数据后就会产生一个回调
{
	char recieve[5];//定义接收数据大小
	char key[5]="hello";
	sscanf(uart_rx,"%s",recieve);//扫描接收数据
	if(strcmp(recieve,key) == 0)//对比数据是否为hello
	{
		sprintf(text,"  World!    ");
		LCD_DisplayStringLine(Line6,(uint8_t *)text);
	}
	HAL_UARTEx_ReceiveToIdle_IT(&huart1 ,(uint8_t *)uart_rx ,50);//用一次关一次,需要重新打开
}

全部代码

c 复制代码
#include "all.h"

uint8_t led_sta=0x20;//LED初始化参数
extern struct Bkeys bkey[];//按键存储
char  text[30]; //存放显示文本
char uart_tx[50];//uart发送缓冲区
char uart_rx[50];//uart接受缓冲区

void LED_Disp(uint8_t dsLED)//LED控制
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//所有LED熄灭
	HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);//左移8位。控制C8~C15引脚,值为1的点亮
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关锁存器
}
void LED_Chg(uint8_t num,uint8_t sta)//单独控制一个LED
{
	uint8_t pos = 0x01<<(num-1);
	led_sta =(led_sta&(~pos))|(pos*sta);
	LED_Disp(led_sta);
}

float adc_read(ADC_HandleTypeDef *hadc)
{
	uint16_t adc_val;
	float adc_f;
	HAL_ADC_Start (hadc);
	adc_val = HAL_ADC_GetValue(hadc);
	adc_f = adc_val*3.3f/4096.0f;
	return adc_f;
}


void setup()
{
	HAL_TIM_Base_Start_IT(&htim6);//开启TIM
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);//产生PWM
	HAL_TIM_IC_Start(&htim15,TIM_CHANNEL_1);//打开pwm捕获
	HAL_TIM_IC_Start(&htim15,TIM_CHANNEL_2);//打开pwm捕获
	
	HAL_ADCEx_Calibration_Start(&hadc2 ,ADC_SINGLE_ENDED);//ADC自动校准
	
	HAL_UARTEx_ReceiveToIdle_IT(&huart1 ,(uint8_t *)uart_rx,50);//用一次关一次,需要重新打开
	
	//LED初始状态
	LED_Disp(0x00);
	//LCD初始化
	LCD_Init();
  LCD_Clear(Black );
  LCD_SetBackColor(Black);
  LCD_SetTextColor(White);
}

void loop()
{
	//PWM捕获
	float frq1 = 0;
	float duty1 = 0;
	
	frq1 = 1000000.0f/(HAL_TIM_ReadCapturedValue(&htim15,TIM_CHANNEL_1)+1);//获取频率
	duty1 = ((HAL_TIM_ReadCapturedValue(&htim15,TIM_CHANNEL_2)+1)*100.f/(HAL_TIM_ReadCapturedValue(&htim15,TIM_CHANNEL_1)+1));//获取占空比
	
	sprintf(text,"     FQR:%.2f Hz     ",frq1);
	LCD_DisplayStringLine(Line2,(uint8_t *)text);
	sprintf(text,"     DUTY:%.2f %%     ",duty1);
	LCD_DisplayStringLine(Line3,(uint8_t *)text);
	
	//ADC
	float adc_data_PB15;
	adc_data_PB15 = adc_read(&hadc2);
	sprintf(text,"  PB15:%.4f V    ",adc_data_PB15);
	LCD_DisplayStringLine(Line4,(uint8_t *)text);
	
//	//UART发送
//	sprintf(uart_tx ,"  PB15:%.4f V  \r\n  ",adc_data_PB15);
//	HAL_UART_Transmit(&huart1,(uint8_t *)uart_tx,strlen(uart_tx),500);//串口名字 数据 长度 发送间隔
	

	
if(bkey[1].short_flag==1)
	{
		LED_Chg(1,1);
		sprintf(text,"        down!        ");
		LCD_DisplayStringLine(Line1,(uint8_t *)text);
		bkey[1].short_flag = 0;
	}
		if(bkey[1].long_flag==1)
            	{
		LED_Chg(2,1);
		sprintf(text,"      long_down!      ");
		LCD_DisplayStringLine(Line1,(uint8_t *)text);
	}

}


	//UART接受
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)//串口接收到数据后就会产生一个回调
{
	char recieve[5];//定义接收数据大小
	char key[5]="hello";
	sscanf(uart_rx,"%s",recieve);//扫描接收数据
	if(strcmp(recieve,key) == 0)//对比数据是否为hello
	{
		sprintf(text,"  World!    ");
		LCD_DisplayStringLine(Line6,(uint8_t *)text);

	}
	HAL_UARTEx_ReceiveToIdle_IT(&huart1 ,(uint8_t *)uart_rx ,50);//用一次关一次,需要重新打开
}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//按键服务
{
	if(htim->Instance == TIM6)
	key_serv();

}
相关推荐
嵌入式小企鹅8 小时前
国产大模型与芯片加速融合,RISC-V生态多点开花,AI编程工具迈入自动化新纪元
人工智能·学习·ai·嵌入式·算力·risc-v·半导体
CinzWS9 小时前
A53多核协同(上):核间通信与缓存一致性协议——ARM多核的“心灵感应“
arm开发·嵌入式·芯片验证·原型验证·a53
WeeJot嵌入式11 小时前
【串口】初始串口-轮询模式
stm32·单片机·嵌入式
三万棵雪松14 小时前
【嵌入式刷题硬件设计基础(一)】
fpga开发·嵌入式·硬件基础
CinzWS14 小时前
A53多核协同(下):一致性内存模型与内存屏障——ARM多核的“时间魔法“
arm开发·嵌入式·原型验证·a53
糯米团子74915 小时前
蓝桥杯javaB组赛前四天复习-1
java·windows·蓝桥杯
WeeJot嵌入式16 小时前
【中断】初识中断以及外部中断的使用
c语言·stm32·单片机·嵌入式硬件·嵌入式
阿源-1 天前
如何在EDKII中编译UNIX风格C语言
嵌入式·uefi·edk2
FreakStudio1 天前
无硬件学LVGL:基于Web模拟器+MiroPython速通GUI开发—布局与空间管理篇
python·单片机·嵌入式·面向对象·并行计算·电子diy
左手厨刀右手茼蒿1 天前
Linux 内核中的进程管理:从创建到终止
linux·嵌入式·系统内核