今日尝试配通STM32 F103 ZET6与HLK-LD303-24G测距雷达的串口通信解码
文章提供测试代码......
目录
HLK-LD303-24G测距雷达外观:
线路连接准备:
我选择使用串口2进行与测距雷达的通信,串口1留着连接电脑进行测试:
定时器与串口配置准备:
先建立一个基本工程:初始化定时器2为1ms溢出一次,并初始化串口1和串口2:
定时器2的初始化:
#include "TIMER_init.h"
//初始化定时器2用作计时中断定时器:
void Timer2_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_InternalClockConfig(TIM2);//选择哪个中断就写哪个
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //修改分频,对实际情况影响不大,可以不修改,这里是不分频(可选1~72)
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上对齐模式,同时还有向下对齐,中央对齐模式
TIM_TimeBaseInitStructure.TIM_Period = 10 - 1; //计数器周期。该参数决定了计数器计数溢出前的最大值。
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1; //分频器预分频系数。该参数决定了计数器时钟频率的变化程度。
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //高级计数器需要,不需要用到的直接给0就好
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
TIM_ClearFlag(TIM2, TIM_FLAG_Update); //用于解决一复位时就先进一次中断的情况
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //响应优先级
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2, ENABLE);
}
串口1、2初始化:
void Usart1_Init(unsigned int baud)
{
GPIO_InitTypeDef gpio_initstruct;
USART_InitTypeDef usart_initstruct;
NVIC_InitTypeDef nvic_initstruct;
// 打开串口GPIO的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 打开串口外设的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//PA9 TXD // 将USART Tx的GPIO配置为推挽复用模式
gpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;
gpio_initstruct.GPIO_Pin = GPIO_Pin_9;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_initstruct);
//PA10 RXD // 将USART Rx的GPIO配置为浮空输入模式
gpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
gpio_initstruct.GPIO_Pin = GPIO_Pin_10;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_initstruct);
usart_initstruct.USART_BaudRate = baud;