蓝桥杯STM32G431RBT6
蓝桥杯注意事项
[*]移植lcd之后要记得在main函数内LCD_Init();开启lcd。
[*]如果lcd显示时led全亮大概率是PD2锁存器出问题
[*]lcd显示最好都各自带一个char text;
[*]按键按下表启动,进入下一步
[*]adc一定要在main开启校准函数HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);记住Calibration和ADC_SINGLE_ENDED
[*]adc自写函数里每一次最好都开启一遍HAL_ADC_Start(hadc);
[*]adc自写函数里value=HAL_ADC_GetValue(hadc);用uint32_t存储,之后转换到float数
[*]adc的转换先乘以3.3再除以4096,顺序反了就归零了
[*]串口发送简单,接收需要中断函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
[*]把串口接收单数据和数据数组分开写,用于接收的单数据是uint8_t类型,不是char类型
[*]接收的数据数组是char类型
[*]单数据接收函数HAL_UART_Receive_IT(&huart1,&data,1);最后接收的长度是1,而且中间的单数据必须取地址,这里接收函数最好用中断模式
[*]要先在主函数写一个HAL_UART_Receive_IT(&huart1,&data,1);用来开启
[*]
//串口接收函数,没有写道串口中断函数内部,注意
if(接收到的数据>0)
{
if(接收到的数据==正常长度)
{
if(接收到的数据==正常值)
{
操作;
}
else
{
异常标记;
}
}
else
{
异常标记;
}
数据数组清零;
标记长度清零;
}
[*]
//主函数串口接收处理
if(接收长度!=0)
{
int 临时长度=接收长度;
延时1ms;
if(临时长度==接收长度)
{
串口接收处理函数;
}
}
[*]发送数据函数HAL_UART_Transmit(&huart1,(uint8_t *)text1,strlen(text1),50);中间的char类型text要强制转换(uint8 *),发送函数最好别用中断模式,第三个长度用strlen,最后一个数记为50
[*]memset函数用法memset(datas,0,30);最后一个直接写数字就好
[*]主函数需要开启pwm定时器HAL_TIM_PWM_Start(&htim17,TIM_CHANEL_1);
[*]改变占空比函数__HAL_TIM_SET_COMPARE
[*]基础定时器(定时中断功能):开启示例HAL_TIM_Base_Start_IT(&htim3);使用中断模式
//main.h补全头文件
#include "stdbool.h"
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
//cubemx生成代码要注意把部分头文件从main.c复制到main.h产品手册
初始配置
然后创建工程代码
LED
//led.c#include "led.h"void LED_Disp(uchar t){ HAL_GPIO_WritePin(GPIOC,GPIO_PIN_ALL,GPIO_PIN_SET);//先把所有的都关上 HAL_GPIO_WritePin(GPIOC,t按键检测2{是否仍然按下}按键检测2 -->|仍然按下_消抖成功|状态2按键检测2 -->|松开了_消抖掉|状态0状态2 -->按键检测3{是否仍然按下2}按键检测3 -->|一直按下_计时time++|状态2_1按键检测3 -->|松开了_要判断time长短|状态2_2状态2_1 -->时间判断{是否够长}时间判断 -->|超过LONG_TIME_此时longflag挂起|状态0时间判断 -->|没超过LONG_TIME_继续计时|状态2状态2_2 -->时间判断2{是否够长2}时间判断2 -->|没超过LONG_TIME_此时shortflag挂起|状态0后面修改了下逻辑,松开后再判断长短,上面的代码没改哦
graph TD状态0 -->按键检测{是否按下}按键检测 -->|按下|状态1按键检测 -->|没有按下|状态0状态1 -->按键检测2{是否仍然按下}按键检测2 -->|仍然按下_消抖成功|状态2按键检测2 -->|松开了_消抖掉|状态0状态2 -->按键检测3{是否仍然按下2}按键检测3 -->|一直按下_计时|time++按键检测3 -->|松开了_|判断time长短判断time长短 -->时间判断2{是否够长}时间判断2 -->|没超过LONG_TIME_此时shortflag挂起|状态0时间判断2 -->|超过LONG_TIME_此时longflag挂起|状态0按键第二种写法(滴答定时器)
#define KB1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)#define KB2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)#define KB3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)#define KB4 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)#define KBGET KB1 | (KB2
页:
[1]