목차
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