赞
踩
作者:车
邮箱:692604135@qq.com
学校:西安工程大学硕士研究生
方向:机器视觉、图像分割、深度学习
写在前面:
格外需要注意的是:所有的初始化代码是配置之后自动生成的,而不是自己写的,po出来代码和注释是为了方便理解
只需要配置引脚就可以了
在进行基于STM32巡检系统设计中,首先需要对各个模块的程序进行初始化,接下来将阐述各个模块的初始化。
电源是整个设计的启动器,所以电源在整个系统的设计中有着不可替代的作用。在配置电源时,选择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:
内部时钟和电源的初始化部分代码如下:
__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。
巡检小车需要输出两路PWM波接到直流电机驱动模块上进行调速,所以直流电机驱动模块需要在STM32处理器上配置两个时钟tim1、tim8,这两个时钟均在Channel1生成PWM波。(按照图中的参数配置)
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。
在超声波模块中,由于需要计算高电平持续的时间,还需要一个tim3进行计数。配置的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;
//时钟来源是内部时钟。
直流电机驱动模块的引脚初始化部分代码如下:
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//引脚为推挽输出模式;
GPIO_InitStruct.Pull = GPIO_NOPULL;//不需要上拉;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;//引脚速度为12.5~50MHz。
红外避障引脚的初始化部分代码如下:
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;//引脚为Input输入模式;
GPIO_InitStruct.Pull = GPIO_NOPULL;//不需要上拉。
超声波模块的引脚初始化部分代码如下:
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//引脚速度为25~100 MHz。
三个引脚命名为L_Pin、M_Pin、R_Pin,这三个引脚均为输入模式,且不需要上拉。
红外测温模块的引脚初始化部分代码如下所示:
HAL_GPIO_Init(DS18B20_DQ_GPIO_Port,&GPIO_InitStructure);
//初始化HAL_GPIO函数;
DS18B20_Rst();//发送复位信号;
return DS18B20_Check();//检测DS18B20返回的存在脉冲。
液晶显示屏模块的引脚初始化部分程序如下:
write_command(0x38);
//液晶显示屏功能设置项:设置16*2显示,5*7点阵字符显示,8位数据接口;
write_command(0x0c);
//液晶显示屏显示开关及光标设置:整体显示开、无光标、不闪烁;
write_command(0x04);
//液晶显示屏显示模式设置:写一个字符后光标右移、整屏显示不移动;
write_command(0x01);
//清屏功能:显示清0,数据指针清0;
STM32引脚图如下
GPIO引脚图如下
(有问题的didi我!)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。