stm32 학습 기록 - 코드를 스캔하여 잠금 해제

목차

usart.c

하드웨어 연결

Baidu 네트워크 디스크 소스 코드


QR 코드의 내용을 인식하고 직렬 포트를 통해 마이크로 컨트롤러로 직접 보낼 수 있는 직렬 통신용 코드 스캐닝 모듈을 사용합니다.

사용되는 모듈에는 코드 스캔 모듈, 릴레이 및 전자 잠금 장치가 포함됩니다.

본질은 코드 스캐닝 모듈이 코드를 스캔하고 직렬 포트를 통해 판단을 위해 단일 칩 마이크로 컴퓨터에 코드 내용을 전송한다는 것입니다.코드 내용을 식별 한 후 릴레이의 스위치를 제어하고 릴레이 전자 잠금 장치를 추가로 제어합니다.

MCU는 이 단계가 실제로 직렬 포트 코드라고 판단합니다.

usart.c

#include "config.h"
#include "Usart.h"

u8 USART_RxBUF[USART_RXBUF_SIZE];
u16 USART1_RecPos=0;


void Usart_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
	
	
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
		
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
		
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	
	USART_InitStructure.USART_BaudRate=USART_BAUD;
	USART_InitStructure.USART_WordLength=USART_WordLength_8b;
	USART_InitStructure.USART_StopBits=USART_StopBits_1;
	USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Parity=USART_Parity_No;
	USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
	
	USART_Init(USART1,&USART_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
	
	USART_Cmd(USART1,ENABLE);
	USART_ClearFlag(USART1,USART_FLAG_TC);
	
}
void UsartSendByte(USART_TypeDef* USARTx,u8 ch)
{
	USART_SendData(USARTx,(u16)ch);
	while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}
void UsartSendString(USART_TypeDef*USARTx,u8*str)
{
	u32 pos=0;
	while(*(str+pos)!='\0')
	{
		UsartSendByte(USARTx,*(str+pos));
		pos++;
	}
	
}
int fputc(int ch,FILE*f)
{
	USART_SendData(USART1,(u16)ch);
	while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
	return (ch);
	
}
void USART1_IRQHandler(void)
{
	u8 RecCh;
	if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
	{
		USART1RecTimer=10;
		RecCh= (u8)USART_ReceiveData(USART1);
		USART_RxBUF[USART1_RecPos++]=RecCh;
		USART_ClearITPendingBit(USART1,USART_IT_RXNE);
	}
	
	
}
unsigned char USRET1_RecProcess(void)
{
	if(USART1RecTimer)return FALSE;
	if(!USART1_RecPos)return FALSE;
	USART_RxBUF[USART1_RecPos++]='\0';
	
	if(strstr((char *)USART_RxBUF,"码的内容")!=NULL)
	{
		relay_off();
		SysTickDelayMs(200);
		relay_on();
	}
	memset(USART_RxBUF,0,USART_RXBUF_SIZE);
	USART1_RecPos=0;
	return TRUE;
}

판정 및 제어 릴레이 설정 기능

unsigned char USRET1_RecProcess(void)
{
	if(USART1RecTimer)return FALSE;
	if(!USART1_RecPos)return FALSE;
	USART_RxBUF[USART1_RecPos++]='\0';
	
	if(strstr((char *)USART_RxBUF,"码的内容")!=NULL)
	{
		relay_off();
		SysTickDelayMs(200);
		relay_on();
	}
	memset(USART_RxBUF,0,USART_RXBUF_SIZE);
	USART1_RecPos=0;
	return TRUE;
}

코드의 내용을 설정하려면 QR 코드 생성기를 다운로드할 수 있습니다.

하드웨어 연결

코드 스캐닝 모듈의 rx——단일 칩 마이크로컴퓨터 PA9

스캐닝 모듈의 tx——단일 칩 마이크로컴퓨터 PA10

릴레이 입력 - PB7

Baidu 네트워크 디스크 소스 코드

마지막으로 디버깅에 사용한 코드는 다음과 같습니다.

링크: https://pan.baidu.com/s/1J5sy5ldL1jGp90VrwaHSAA 
추출 코드: 9438

추천

출처blog.csdn.net/sujiaxin12/article/details/123762236