资讯详情

stm32学习记录——扫码开锁

usart.c

硬件连接

百度网盘源码


使用的模块包括扫码模块、继电器和电子

本质是扫描代码模块扫描代码,通过串口将代码的内容传输到单片机进行判断,识别代码的内容,然后控制继电器的开关,继电器进一步控制电子锁。

单片机的判断实际上是串口代码

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; }

设置码的内容可以下载二维码生成器。

硬件连接

扫码模块的rx——单片机PA9

扫码模块的tx——单片机PA10

继电器IN——PB7

百度网盘源码

最后,提供我调试时使用的代码。

链接:https://pan.baidu.com/s/1J5sy5ldL1jGp90VrwaHSAA 提取码:9438

标签: 2af05继电器2路继电器pa384f

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台