嵌入式蓝桥杯学习9 usart串口

复制一下之前ADC的工程,打开cubemx

cubemx配置

1.在Connectivity中点击USART1

Mode(模式):Asynchronous(异步模式)

2.将PA9设置为USART1_TX,PA10设置为USART1_RX。

3.配置Parameter Settings.

Baud Rate(波特率):9600

4.配置NVIC Settings

勾选 USART1 global interrupt/USART1 wake-up interrupt through EXTI line 25

点击Generated Code、

代码编写

在my_main.h中添加头文件

复制代码
#include "usart.h"
#include "string.h"

my,main.c

复制代码
#include "my_main.h"
#include "stm32g4xx_hal_adc.h"
#include "adc.h"
#include "usart.h"
#include "string.h"
uint8_t led_sta=0x10;
char text[30];
char usart_tx[50];
char usart_rx[50];
void LED_Disp(uint8_t dsLED)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//所有LED熄灭(l小写)
	HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);//左移8位:控制C8-15引脚,值为1的点亮
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关锁存器
}
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;
}
float adc_read_os(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/65536.0f;
	return adc_f;
}
void setup()
{

	HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
	HAL_UARTEx_ReceiveToIdle_IT(&huart1,(uint8_t*)usart_rx,50);
	HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
	LED_Disp(0x00);//关掉所有LED	
	LCD_Init();//LCD初始化
	LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
}

void loop()
{
	float adc_data_PB15;
	adc_data_PB15=adc_read(&hadc2);
	sprintf(usart_tx,"    PB15=%.4fV   \r\n ",adc_data_PB15);
	HAL_UART_Transmit(&huart1,(uint8_t *)usart_tx,strlen(usart_tx),50);
}

示例:密码锁

复制代码
#include "my_main.h"
#include "stm32g4xx_hal_adc.h"
#include "adc.h"
#include "usart.h"
#include "string.h"
uint8_t led_sta=0x10;
char text[30];
extern struct Bkeys bkey[];
char usart_tx[50];
char usart_rx[50];
char passwd[3]={'1','2','3'};
void LED_Disp(uint8_t dsLED)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//所有LED熄灭(l小写)
	HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);//左移8位:控制C8-15引脚,值为1的点亮
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关锁存器
}
void setup()
{

	HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
	HAL_UARTEx_ReceiveToIdle_IT(&huart1,(uint8_t*)usart_rx,50);
	HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);

	LED_Disp(0x00);//关掉所有LED
	
	LCD_Init();//LCD初始化
	LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
}

void loop()
{
	
}


void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{	char old_pswd[10];
	char new_pswd[10];
	sscanf(usart_rx,"%3s-%3s",old_pswd,new_pswd);
	if(strcmp(old_pswd,passwd)==0)
	{	for(int i=0;i<3;i++)passwd[i]=new_pswd[i];
		sprintf(text,"new:%s ",passwd);
		LCD_DisplayStringLine(Line4,(uint8_t *)text);//局部刷新	
	}
	else
	{	sprintf(text,"Failed! ");
		LCD_DisplayStringLine(Line4,(uint8_t *)text);//局部刷新	
	}
	HAL_UARTEx_ReceiveToIdle_IT(&huart1,(uint8_t*)usart_rx,50);     
}
相关推荐
熊猫钓鱼>_>10 小时前
ArkTS 装饰器总览:V1 / V2 / 通用装饰器完整学习笔记
笔记·学习·华为·交互·harmonyos·arkts·arkweb
KOAN凯擎小妹12 小时前
无源晶振为什么有串联谐振和并联谐振?MCU为什么使用并联晶体?
单片机·嵌入式硬件·晶振·元器件
茯苓gao13 小时前
嵌入式开发笔记:CAN与CAN FD完全指南——从帧格式差异到MCU选型实战
网络·笔记·stm32·嵌入式硬件·学习·汽车
木木_王13 小时前
嵌入式学习 | STM32 裸板驱动开发(Day06) | DHT11温湿度传感器超详解(单总线时序+全套驱动代码+智能温湿度报警项目)
驱动开发·stm32·学习
FellAveal14 小时前
【Go语言入门学习笔记】Part19.速率控制、原子计数器、互斥锁(Mutex)、状态协程
笔记·学习·golang
你怎么知道我是队长14 小时前
经典蓝牙(Bluetooth Classic / BR/EDR)学习计划
学习
论迹复利14 小时前
蓝牙 OTA 升级断连、升级失败底层链路问题定位
嵌入式硬件·安全·bt
极地野狼 音乐哔哔14 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
学习·microsoft
振南的单片机世界15 小时前
3.5T静默分帧,CRC16校验:Modbus-RTU帧结构解析
arm开发·stm32·单片机·嵌入式硬件
LingzhiPi15 小时前
零知派ESP32--AS5600磁吸旋钮音量控制器
c++·单片机·嵌入式硬件