当前位置: 首页 > news >正文

(自用)蓝桥杯准备(需要写的基础)

要写的文件
led_app
lcd_app
key_app
adc_app
usart_app
scheduler
LHF_SYS

一、外设引脚配置

1. 按键引脚

按键引脚配置如下:

  • B1:PB0
  • B2:PB1
  • B3:PB2
  • B4:PA0

2. LCD引脚

LCD引脚配置如下:

  • GPIO_Pin_9 /* PB.9 */
  • GPIO_Pin_8 /* PB.8 */
  • GPIO_Pin_5 /* PB.5 */
  • GPIO_Pin_10 /* PB.10 */

3. LED引脚

LED引脚配置如下:

  • PC8-PC15

4. USART引脚

USART引脚配置如下:

  • A9(USART1_TX)
  • A10(USART1_RX)
  • 今天一直因为串口的事情弄不起耗费两个小时,结果不是代码的问题,是板子有问题,啊,我真的服了,还把我的代码改成了一坨
  • https://blog.csdn.net/m0_46175974/article/details/134515555?ops_request_misc=%257B%2522request%255Fid%2522%253A%25229b5dc5d8695d41de72dc965cac7280d8%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=9b5dc5d8695d41de72dc965cac7280d8&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-134515555-null-null.142v102pc_search_result_base3&utm_term=%E4%B8%B2%E5%8F%A3%E5%8F%AA%E6%8E%A5%E5%8F%971%E6%AC%A1%E7%9A%84%E5%8E%9F%E5%9B%A0&spm=1018.2226.3001.4187
    这个博主提到的一个问题,是我把自己弄晕过去遇到的,希望对你有帮助

5. 板上电阻

板上电阻R37和R38连接到:

  • PB15
  • PB12

二、关键函数

1. LCD显示函数

void LcdSprintf(uint8_t Line, char *format, ...)
{char String[21];va_list arg;va_start(arg, format);vsprintf(String, format, arg);va_end(arg);LCD_DisplayStringLine(Line, String);
}

使用说明

  • Line:指定LCD显示的行号。
  • format:格式化字符串,类似于printf的用法。
  • 该函数通过va_listvsprintf实现可变参数的格式化显示。

2. 按键状态检测

key_val = key_read();
key_down = key_val & (key_old ^ key_val);
key_up = ~key_val & (key_old ^ key_val);
key_old = key_val;

使用说明

  • key_read():读取当前按键状态。
  • key_down:检测按键按下事件。
  • key_up:检测按键释放事件。
  • key_old:保存上一次按键状态,用于对比。

3. ADC电压采集

uint32_t GetAdcVoltage(HAL_ADC_HandleTypeDef *hadc)
{HAL_ADC_Start(hadc);uint32_t adc = HAL_ADC_GetValue(hadc);return adc * 3.3 / 4096;
}

使用说明

  • HAL_ADC_Start(hadc):启动ADC转换。
  • HAL_ADC_GetValue(hadc):获取ADC转换后的值。
  • 由于ADC精度为12位,参考电压为3.3V,因此通过公式adc * 3.3 / 4096计算实际电压值。

4. 串口通信

(1)中断方式

如果忘记使用DMA,可以直接使用中断方式:

  • 配置引脚A9(USART1_TX)和A10(USART1_RX)。
(2)DMA方式

使用DMA接收串口数据:

HAL_UARTEx_ReceiveToIdle_DMA(&huart1, uart_rx_dma_buffer, sizeof(uart_rx_dma_buffer));
__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);

使用说明

  • HAL_UARTEx_ReceiveToIdle_DMA:配置DMA接收串口数据,直到接收到空闲信号。
  • __HAL_DMA_DISABLE_IT:禁用DMA的半传输中断。
(3)标准输入输出重定向

为了在STM32上使用标准输入输出函数(如printfscanf),需要重定向fputcfgetc函数:

int fputc(int ch, FILE* str)
{HAL_UART_Transmit(&huart1, (uint8_t *) &ch, 1, 10);return ch;
}int fgetc(FILE *fp)
{uint8_t ch = 0;HAL_UART_Receive(&huart1, &ch, 1, 0xffff);return ch;
}

使用说明

  • fputc:将字符通过串口发送。
  • fgetc:从串口接收字符。

http://www.mrgr.cn/news/98050.html

相关文章:

  • 基于数字水印的公文流转系统设计与实现
  • 【图像分类】【深度学习】图像分类评价指标
  • 订阅不到topic排查方式
  • ch07课堂参考代码
  • SDC命令详解:使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数
  • 责任链设计模式(单例+多例)
  • C++算法之代码随想录(链表)——基础知识
  • mujoco graspnet 仿真项目的复现记录
  • Python学习笔记(二)(字符串)
  • 【后端开发】初识Spring IoC与SpringDI、图书管理系统
  • 力扣热题100刷题day63|49.字母异位词分组
  • C++指针(四)万字图文详解!
  • 嵌入式MCU常用模块
  • C语言:位段
  • MCP基础学习四:MCP在AI应用中的集成(MCP在AI应用中的完整架构图)
  • 面试题之网络相关
  • 算法驱动的场景识别:规则引擎与机器学习的强大结合
  • C++中作用域public,private,protected说明
  • SSRF打靶总结
  • 浅析Centos7安装Oracle12数据库