海康读码器stm32单片机程序

#include "stm32f4xx_hal.h"
#include <string.h>
#include <stdlib.h>

#define MAX_BUFFER_SIZE 1024
UART_HandleTypeDef huart2;

void SystemClock_Config(void);static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);

int main(void) {    
   HAL_Init();    
   SystemClock_Config();    
   MX_GPIO_Init();      
   MX_USART2_UART_Init();    // 发送读取二维码指令    
   char cmd[] = {0x55, 0x04, 0x02, 0x00, 0x01, 0x10};    
   HAL_UART_Transmit(&huart2, (uint8_t*)cmd, sizeof(cmd), 1000);    // 读取返回数据    
   char buffer[MAX_BUFFER_SIZE];   
    int len = HAL_UART_Receive(&huart2, (uint8_t*)buffer, MAX_BUFFER_SIZE, 1000);    // 解析二维码   
     if (len > 0) {      
       if (buffer[0] == 0x55 && buffer[2] == 0x01) {            
       int length = buffer[3] * 256 + buffer[4];              
       char *data = (char*)malloc(length);            
       memcpy(data, buffer + 5, length);            
       printf("读取到二维码:%s\n", data);            
       free(data);      
         } else {          
           printf("未读取到二维码\n");     
          }   
        } else {       
            printf("读取失败\n");    
         }    
         while (1);
         }

void SystemClock_Config(void) {    

RCC_OscInitTypeDef RCC_OscInitStruct = {0};        RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};  

/** Configure the main internal regulator output voltage     */  
  __HAL_RCC_PWR_CLK_ENABLE();      __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);  
/** Initializes the CPU, AHB and APB busses clocks     */  
  RCC_OscInitStruct.OscillatorType =      RCC_OSCILLATORTYPE_HSI;    RCC_OscInitStruct.HSIState = RCC_HSI_ON;    RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;    RCC_OscInitStruct.PLL.PLLM = 8;    RCC_OscInitStruct.PLL.PLLN = 168;    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;    RCC_OscInitStruct.PLL.PLLQ = 4;    
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {     
     Error_Handler();  
       }  
         /** Initializes the CPU, AHB and APB busses clocks     */    
         RCC_ClkInitStruct.ClockType = 
RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;  
           RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;   
            if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) 
            {       
                Error_Handler(); 
               }
            }

static void MX_USART2_UART_Init(void) {    huart2.Instance = USART2;    huart2.Init.BaudRate = 9600;    huart2.Init.WordLength = UART_WORDLENGTH_8B;    huart2.Init.StopBits = UART_STOPBITS_1;    huart2.Init.Parity = UART_PARITY_NONE;    huart2.Init.Mode = UART_MODE_TX_RX;    huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;    huart2.Init.OverSampling = UART_OVERSAMPLING_16;    

if (HAL_UART_Init(&huart2) != HAL_OK) {        Error_Handler();  
}}

static void MX_GPIO_Init(void) {    __HAL_RCC_GPIOA_CLK_ENABLE();    GPIO_InitTypeDef GPIO_InitStruct = {0};    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;    GPIO_InitStruct.Pull = GPIO_PULLUP;    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;    GPIO_InitStruct.Alternate = GPIO_AF7_USART2;    
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);}
void Error_Handler(void) {    
 __disable_irq();    
while (1);}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值