基于STM32的智能巡检小车系统设计--软件初始化

作者:车
邮箱:692604135@qq.com
学校:西安工程大学硕士研究生
方向:机器视觉、图像分割、深度学习

写在前面:

格外需要注意的是:所有的初始化代码是配置之后自动生成的,而不是自己写的,po出来代码和注释是为了方便理解

需要配置引脚就可以了

在进行基于STM32巡检系统设计中,首先需要对各个模块的程序进行初始化,接下来将阐述各个模块的初始化。

1. 内部时钟和电源的初始化

电源是整个设计的启动器,所以电源在整个系统的设计中有着不可替代的作用。在配置电源时,选择Crystal/Ceramic Resonator(晶体振荡器)。电源配置如图所示。
在这里插入图片描述

在STM32F4中,有5个最重要的时钟源,为HSI、HSE、LSI、LSE、PLL。系统的时钟配置如图所示。(按照图中的参数配置)
在这里插入图片描述

  • ①LSI是低速内部时钟,RC振荡器,频率为32kHz左右。供独立看门狗和自动唤醒单元使用。

  • ②LSE是低速外部时钟,接频率为32.768kHz的石英晶体。这个主要是RTC的时钟源。

  • ③HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。开发板接的是8M的晶振。HSE也可以直接做为系统时钟或者PLL输入。

  • ④HSI是高速内部时钟,RC振荡器,频率为16MHz。可以直接作为系统时钟或者用 作PLL输入。

  • ⑤PLL为锁相环倍频输出。

STM32F4有两个PLL:

  • 主PLL(PLL)由HSE或HSI提供时钟信号,并具有两个不同的输出时钟。
  • 专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性。

内部时钟和电源的初始化部分代码如下:

__HAL_RCC_PWR_CLK_ENABLE();//使能PWR时钟;
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
//设置调压器输出电压级别1;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;//时钟源为HSE;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;//PLL时钟源选择HSE;
RCC_OscInitStruct.PLL.PLLM = 8;//主PLL和音频PLL分频系数为8;
RCC_OscInitStruct.PLL.PLLN = 336;//主PLL倍频系数为336;
RCC_OscInitStruct.PLL.PLLQ = 4;
//USB/SDIO/随机数产生器等的主PLL分频系数为4。

2. 时钟初始化

2.1 tim1、tim8时钟初始化

巡检小车需要输出两路PWM波接到直流电机驱动模块上进行调速,所以直流电机驱动模块需要在STM32处理器上配置两个时钟tim1、tim8,这两个时钟均在Channel1生成PWM波。(按照图中的参数配置)
图4-5 tim1时钟配置

tim1的初始化部分代码如下:

htim1.Init.Prescaler = 20;//表示tim1的预分频系数是20;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;//计数模式是上升沿模式;
htim1.Init.Period = 799;//tim1的周期是799;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;//时钟分频系数为1;
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
//tim1可以自动重新装载/提前下载使能;
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
//时钟来源是内部时钟;
sConfigOC.Pulse = 320;//脉冲的大小为320。

2.2 tim3时钟初始化

在超声波模块中,由于需要计算高电平持续的时间,还需要一个tim3进行计数。配置的tim3如图所示。(按照图中的参数配置)

图4-6 tim3时钟配置

tim3的初始化部分代码如下:

htim3.Init.Prescaler = 168-1;
//tim3的预分频系数是168-1,即得到的计数频率等1MHz(每秒计数1000000次);
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;//计数模式是上升沿模式;
htim3.Init.Period = 2-1;//每隔1ms计数一次,定时器时基为2微秒;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;//时钟分频系数为1;
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
//时钟来源是内部时钟。

3. GPIO口初始化

3.1 直流电机驱动模块初始化

直流电机驱动模块的引脚初始化部分代码如下:

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//引脚为推挽输出模式;
GPIO_InitStruct.Pull = GPIO_NOPULL;//不需要上拉;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;//引脚速度为12.5~50MHz。

3.2 红外避障模块的初始化

红外避障引脚的初始化部分代码如下:

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;//引脚为Input输入模式;
GPIO_InitStruct.Pull = GPIO_NOPULL;//不需要上拉。

3.3 超声波避障模块的初始化

超声波模块的引脚初始化部分代码如下:

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//引脚速度为25~100 MHz。

3.4 灰度循迹模块的初始化

三个引脚命名为L_Pin、M_Pin、R_Pin,这三个引脚均为输入模式,且不需要上拉。

3.5 红外测温模块的初始化

红外测温模块的引脚初始化部分代码如下所示:

HAL_GPIO_Init(DS18B20_DQ_GPIO_Port,&GPIO_InitStructure);
//初始化HAL_GPIO函数;
DS18B20_Rst();//发送复位信号;
return DS18B20_Check();//检测DS18B20返回的存在脉冲。

4. 液晶显示屏初始化

  • 液晶显示屏需显示红外温度传感器测得的温度。
  • 液晶显示屏需要给D0-D7、RW、RS、E配置11个GPIO_Output引脚显示测得的温度。分别命名为LCD1602_D0-LCD1602_D7、LCD1602_RS、LCD1602_RW以及LCD1602_E与PA0-PA7、PB0-PB2引脚相连。

液晶显示屏模块的引脚初始化部分程序如下:

write_command(0x38);
//液晶显示屏功能设置项:设置16*2显示,5*7点阵字符显示,8位数据接口;
write_command(0x0c);
//液晶显示屏显示开关及光标设置:整体显示开、无光标、不闪烁;
write_command(0x04);
//液晶显示屏显示模式设置:写一个字符后光标右移、整屏显示不移动;
write_command(0x01);
//清屏功能:显示清0,数据指针清0;

STM32引脚配置和GPIO引脚配置

STM32引脚图如下
在这里插入图片描述
GPIO引脚图如下
在这里插入图片描述
(有问题的didi我!)

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值