嵌入式蓝桥杯学习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);     
}
相关推荐
楚山之石8 小时前
【Medical Image Analysis】深度学习医学图像合成综述:伪CT、合成MRI与合成PET的架构、性能与临床边界
图像处理·人工智能·学习·mr·mri
创界工坊工作室8 小时前
55-基于STC89C52宠物智能饲喂控制系统设计
stm32·单片机·嵌入式硬件·51单片机·proteus·宠物
Li_RuiQi9 小时前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉
极客 - L U11 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
SteveSenna12 小时前
aubo学习:realsense手眼标定
学习·机器人·视觉检测
码小文13 小时前
CAM350使用笔记(6)---Gerber文件铺铜间距检查
嵌入式硬件·cam350软件·cam350使用笔记
Li_RuiQi13 小时前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
Canmag 兴隆磁性13 小时前
回复磁导率 μ_R:永磁体在动态磁路中的关键参数
开发语言·学习·r语言·永磁材料·充磁·磁导率
lengxuenong13 小时前
区间覆盖问题 · 简明学习手册1
java·学习·算法
悟道书生14 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue