STM32的一些基础硬件 一、通用配置与声明STM32的一些通用设置文中所有引脚是按照我自己的芯片的读者可以根据自己的芯片原理图改动二、LED灯光1、在CubeMX的芯片俯视图中找到PB5和PE5左键并选择GPIO_Output右键并设置User Label,如LED12、完成其他的基础配置3、在生成代码后找到While(1)循环准备输入程序4、代码HAL_GPIO_WritePin(LED1_GPIO_Port,LED0_Pin,GPIO_PIN_RESET);//-高电平 HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);//-低电平 HAL_GPIO_TogglePin(LED1_PORT, LED1_PIN);//反转状态 HAL_Delay(500);//-延时500msSET高电平3.3V / 5V1GPIO_PIN_SETRESET低电平0V / GND0GPIO_PIN_RESET5、代码的简化在开头定义宏即可#define LED_ON() HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, GPIO_PIN_RESET) // 低电平点亮 #define LED_OFF() HAL_GPIO_WritePin(LED1_PORT, LED1_PIN, GPIO_PIN_SET) #define LED_TOGGLE() HAL_GPIO_TogglePin(LED1_PORT, LED1_PIN)6、呼吸灯的搭建6.1、原理利用PWM输出高频波改变LED灯的占空比以改变其亮度6.2、CubeMX配置左侧 Timers → 点击 TIM3Clock Source选 Internal ClockChannel2选 PWM Generation CH2Parameter Settings 标签页Prescaler71972MHz / (7191) 100kHzCounter Period999100kHz / 999 ≈ 100Hz PWM频率Pulse0初始占空比0CH PolarityHigh高电平有效初学时直接套用这些设置即可定时器时钟72 MHzTIM3 挂在 APB1 总线上APB1 72MHzPrescaler预分频器71972MHz / (719 1) 100 kHz即计数器每 10μs 加 1Counter Period自动重装载值999100kHz / (999 1) 100 Hz→ 周期 10msPWM 频率100 Hz适合 LED 调光人眼无闪烁占空比分辨率0~999共 1000 级Pulse值从 0 到 999对应 0%~100%Prescaler 719将 72MHz 降到 100kHz让计数器跑得“慢一点”便于用 0~999 表示 1000 级占空比Counter Period 999得到 100Hz 的 PWM 频率高于人眼分辨能力约 60HzLED 看起来是“连续调光”而不是“闪烁”Pulse 0初始占空比为 0%LED 默认熄灭防止上电瞬间全亮CH Polarity High高电平有效占空比越大平均电压越高LED 越亮6.3代码//放在User Code Begin2 HAL_TIM_PWM_Start(htim3, TIM_CHANNEL_2);//放在while(1)中 for (uint16_t duty 0; duty 1000; duty 10){ __HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_2, duty); HAL_Delay(15); } for (uint16_t duty 999; duty 0; duty - 10){ __HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_2, duty); HAL_Delay(15); }三、按键1、在CubeMX的芯片俯视图中找到PE3和PE4左键并选择GPIO_Input右键并设置User Label,如KEY0和KEY12、在System Core - GPIO 中间的框GPIO Pull-up/Pull-down中选择Pull-up(Pull-down也行)未按下按下Pull-up高电平低电平Pull-down低电平高电平3、代码if (HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) GPIO_PIN_RESET) // 按键被按下低电平 { HAL_Delay(20); // 简单消抖 if (HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) GPIO_PIN_RESET) { // 按键确实被按下了执行动作 HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET); // LED亮 while(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) GPIO_PIN_RESET); // 等待松手 } }4、简化#define KEY0_PRESSED() (HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) GPIO_PIN_RESET)四、蜂鸣器1、在CubeMX的芯片俯视图中找到PB8左键并选择GPIO_Output右键并设置User Label,如BEEP2、代码HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_RESET);五、串口输出1、Connectivity - USART1Mode勾选Asynchronous确认Parameter SettingsBaud Rate 115200Word Length 8 BitsParity NoneStop Bits 12、printf重定向//放在main.c的USER CODE BEGIN 0 #include stdio.h int fputc(int ch, FILE *f) { HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 0xFFFF); return ch; }3、程序中用printf输出即可4、打开sscom.exe(自己下载或者正点原子官方的资源中有),选择端口设备管理器中查找端口号波特率为115200打开串口即可查看输出六、光敏传感器1、Analog -ADC3,Mode选择IN6,芯片俯视图中PF8左键选择ADC3_IN6,右键编辑User_Label2、代码HAL_ADC_Start(hadc3);//启动 if (HAL_ADC_PollForConversion(hadc3, 100) HAL_OK) { uint32_t adc_value HAL_ADC_GetValue(hadc3); printf(光敏值: %d\r\n, adc_value); } else { printf(ADC 转换超时\r\n); // 调试时便于定位 } HAL_ADC_Stop(hadc3);//停止 //HAL_ADC_PollForConversion(hadc3, 100) //等待转换完成超时时间 100ms。 //返回 HAL_OK转换完成可以读取数据。 //返回 HAL_TIMEOUT超时ADC 没完成转换。七、基本定时器1、Timer中选择TIM6/TIM7,Clock Source选择Internal ClockAPB12、根据需要设置Parameter Settings并使能TIM6中断3、代码//开启定时器 HAL_TIM_Base_Start_IT(htim6); //中断回调函数 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim-Instance TIM6) // 判断是 TIM6 触发的中断 { HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin); // 翻转 LED0 } }

相关新闻

最新新闻

Python networkx邻接矩阵可视化:从矩阵构建到布局优化的完整指南

Python networkx邻接矩阵可视化:从矩阵构建到布局优化的完整指南

1. 从邻接矩阵到可视化网络:一个被低估的起点在数据分析和算法研究的路上,我们经常和“图”打交道。无论是社交网络里的好友关系、知识图谱里的概念链接,还是交通网络里的站点连接,本质上都可以抽象成点和边的集合。而邻接矩阵&am…

2026/8/28 8:14:48
大型前端应用的权限边界怎么划

大型前端应用的权限边界怎么划

大型前端应用的权限边界怎么划先区分界面控制与授权 大型前端常用路由守卫或 hasPermission(BTN_EDIT) 控制页面与按钮,这些做法能减少无权用户看到的入口,却不能保护后端资源。浏览器代码和状态都在用户可控制的环境里,直接调用接口、修改请…

2026/8/28 8:14:48
英伟达算力推理芯片

英伟达算力推理芯片

文章目录推理芯片表格对比满血版对华阉割版高带宽存储器总结推理芯片表格对比 表格为Dense(稠密)口径下的比较 满血版 芯片型号架构发布时间显存规格核心算力显存带宽对华出口状态A100Ampere2020年80GB HBM2eFP16: 312 TFLOPS2.0 TB/s禁售H100Hopper2…

2026/8/28 8:14:48
0.13 的差异(约 43% 相对误差)不算正常,属于明显偏大,需要排查原因

0.13 的差异(约 43% 相对误差)不算正常,属于明显偏大,需要排查原因

0.13 的差异(约 43% 相对误差)不算正常,属于明显偏大,需要排查原因。Siemens(T3Ster/Simcenter)结果通常被视为高精度参考,您的计算值偏高较多。 1. 差异是否正常的判断 正常范围:同一器件、同一次测试条件下,重复性好的测量差异通常在 5% 以内(甚至更好可达 2-3%)…

2026/8/28 8:14:48
Wordle变AI擂台:多轮反馈与提示词工程实战

Wordle变AI擂台:多轮反馈与提示词工程实战

把 Wordle 改造成一组小型 AI 挑战,是我最近在练手时觉得性价比很高的方向。Wordle 规则很简单:六次机会,猜一个五字母英文单词,每次猜测会返回绿、黄、灰三种标记。绿代表位置和字母都对,黄代表字母对但位置不对&…

2026/8/28 8:14:48
基于Stigmergy的团队LLM wiki协作机制与FastAPI工程实践

基于Stigmergy的团队LLM wiki协作机制与FastAPI工程实践

Stigmergy 听起来像一个冷门词,但它可能是团队协作型 LLM wiki 最值得借鉴的设计原则。Andrej Karpathy 带动的 “LLM wiki” 讨论,通常指向一种个人化知识管理范式:一个人借助大语言模型持续提问、修订、链接页面,把零散笔记变成…

2026/8/28 8:09:48