Key和Led模板构建

一,按键B1~4分别对应引脚PB012PA0

二,led灯对应引脚PC8~15 外加使能端PD2

1.PB012和PA0全为Input模式,PC8~15和PD2全为Output模式(默认低电平为点亮)所以全部配置为高电平1      进行模块化编程,在主函数中进行初始化

2.在bsp_key_led.c文件中分别写uint8_t Key_Scan(void)void LED_Disp(uint8_t ucled)函数

3.在Cubemax生成代码结尾给所有PC引脚置1

4.在子函数中添加减速函数和扫描函数,编写子函数

其中:减速变量创建区在stm32g4xxxhal.c中找__IO uint32_t uwTick;

LCD模板构建

1.与其他不同的是,lcd.c和.h文件需从给定的资源包中提取

注:.h需要添加两个文件一个是lcd.h,另一个是fonts.h

2.提取之后进行改名,然后添加到BSP中

3.定义数组uint8_t Lcd_Disp_String[24]

4.初始化,编写函数

usart模板构建

一,usart1使用PA9,10引脚

1.通过stm32Cubemax生成初始化文件(异步模式,波特率9600,中断使能)

2.BSP添加uart文件,it.c中添加uart文件,hal.conf中将uart打开

3.在it.c中添加串口文件,引用usart.h头文件

4.HAL_Driver层中添加uart.c和uart.ex.c

5.在RCC中添加新的时钟配置程序(在源工程里main.h找)

注意:

1.在发送信息时不需要打开串口

2.串口在主函数中需打开一次,在编写串口中断回调函数时,最后需再次打开一次

运行过程中遇到问题:

led显示常亮不熄灭,原因是:滴答定时器优先级低于串口优先级,导致程序卡住,不能执行

解决方法:在HAL_Init中找到TICK_INT_PRIORITY进行配置滴答定时器优先级,串口优先级直接在usart.c中配置

IIC模板构建

1,iic.c和iic.h需从比赛给的资源包里直接提取

2,函数I2CWaitAck中需要修改(将SDA移到delay1下方)

3,需要在原来基础上自己续写编码

一,24C02

在i2C_write和i2C_read两个函数中间需加入HAL_Delay(1);

二,MCP4017

电阻值计算

电压值计算

ADC模块构建

1.stm32CubeMax生成源文件,对ADC1和ADC2进行配置,单通道,异步2分频,采样速度640.5Bit/s,在时钟界面选择PLL而不是sys

2.main.h中将adc底层打开

3.在Driver层中添加hal.adc.c跟ex.c

4.在adc.c中手敲getadc1代码跟getadc2代码

5.在目标工程rcc.c中添加锁相环时钟配置

TIM模块构建

1.通过stm32Cubemax生成源文件:

(1)BASIC基础定时器6:NVIC中断使能,分频7999,自动重装载999

计算公式:Psc=7999,arr=999 

Tout=[(Psc+1)×(arr+1)]/80M=xxxs(单位:秒)

如图:计算出应为0.1s=100ms,则该定时器每100ms产生一次中断

(2)PWM_INPUT_TIM2(PA15):

主模式:复位 ;触发源:TI1FP1;时钟源:内部时钟;CH1:直接模式;CH2:间接模式

NVIC中断使能;分频:79;自动重装载:65535;输入通道1,2分别为上升沿和下降沿

(3)PWM_OUTPUT_TIM3(PA6):

时钟源:内部时钟;分频:79;自动重装载:999;Pulse脉冲:300;占空比30%

(4)PWM_OUTPUT_TIM17(PA7):

分频:79;自动重装载:999;Pulse脉冲:600;占空比60%

(5)SQU_OUTPUT_TIM15(PA2):

分频:79;自动重装载:65535;输出比较通道:Toggle on match ;Pulse脉冲:100

NVIC中断使能

2.配置产生中断的函数的优先级

例:BASIC优先级3;输入通道优先级2;方波输出优先级3;

项目1:利用基础定时器实现1秒发送一串字符

1.初始化后要打开定时器HAL_TIM_Base_Start_IT(&htim6);

2.主函数添加初始化函数,在it.c里面添加BASIC6的代码

3.在HAL_TIM_IRQHandler中找到刷新Callback函数后,在主函数中进行编写

注意:在使用高级定时器时,初始化完成后需要打开定时器(在hal.tim.c中查找start函数);

项目2:输出固定频率方波

根据引脚,连接杜邦线和捕获输入端口,通过LCD显示完成

方波输出信号频率计算:

例子:需要生成1KHz的 1M=1,000,000   1M/1000=1000 此时1000÷2=500

函数中写入500即可生成1kHz的波

注意:

在使用输入模式时(INPUT),初始化后需打开定时器,打开通道

使用PWM输出模式时,初始化后也需打开时定时器

RTC模块构建

使用方法:定义数组,然后调用函数,在Lcd上显示

1.CubeMax:

2.定义日期和时间

RTC_TimeTypeDef H_M_S_Time;
RTC_DateTypeDef Y_M_D_Date;

3.配置过程使用到时钟,在源文件main.c()中SystemClock_Config将RTC时钟配置添加到目标工程里

4.BIN为二进制码,BCD为十进制码(显示使用BIN)

注意:此时时钟配置发生改变,需在rcc.c中修改

最小模板

1. SYS--->SysTick;NVIC--->4bit 分频;RCC(复位与时钟控制)选择晶振;

2.时钟配置80MHz

3.Project Manager配置--->MDK V5版本

                                    --->Code Generator'.c/.h'

4.将四个基础文件夹复制到Object-Project

跳转目标工程

4.需添加启动文件 stm32xxxxxx.s(液晶驱动文件夹)

5.源文件 魔术棒,Debug,CMSIS-DAP[setting中Flash Download-->Run and reset]

6.在目标工程里面,魔术棒,C++,文件访问(目标工程文件夹,inc,bsp)

7.将系统时钟配置进行模块化编程(添加一个中间层BSP)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐