基于stm32f303cbt6的点灯实验(硬件+软件)

news/2024/11/30 17:57:11/

一、硬件原理图及PCB

项目完整的原理图
在这里插入图片描述
在这里插入图片描述
理论上只要给高电平,灯就亮。

二、软件(keil程序)

main.c

//stm32f303cbt6
//32kb ram
//128kb flash
//本实验,LED常亮
/* Includes ------------------------------------------------------------------*/
#include <stm32f30x.h>
#include <stdio.h>
#include "led.h"int main()
{// Sysclk = 72 MHzhardware_init_all();while(1){}
}

led.c

/* Includes ------------------------------------------------------------------*/
#include "led.h"void hardware_init_all(void)
{//时钟频率结构体变量存放不同片上时钟的频率RCC_ClocksTypeDef RCC_Clocks;/*!< 4 bits for pre-emption priority  //四位抢占优先级0 bits for subpriority */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);hardware_init_rcc();//获取时钟频率RCC_GetClocksFreq (&RCC_Clocks);//HCLK  :提供给AHB总线的时钟,由系统时钟SYSCLK 分频得到,一般不分频,等于系统时钟SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);//1ms中断一次RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);hardware_init_led();}//Initialize main clock system
void hardware_init_rcc(void)
{//0 wait state if 0MHz < SYSCLK <= 24MHz//1wait state if 24MHz < SYSCLK <= 48MHz//2 wait state if 48MHz < SYSCLK <= 72MHzFLASH_SetLatency(FLASH_Latency_2);FLASH_PrefetchBufferCmd(ENABLE);//选择FLASH预取指缓存的模式,预取指缓存使能   //switch to HSIRCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);while (RCC_GetSYSCLKSource() != 0x00) {}//等待HSE成为SYSCLK时钟源 RCC_DeInit();//RCC寄存器恢复初始化值//enable HSERCC_HSEConfig(RCC_HSE_ON);//使能外部高速时钟RCC_WaitForHSEStartUp();while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET) {} //等待外部高速时钟使能就绪RCC_PLLConfig(RCC_PLLSource_PREDIV1,RCC_PLLMul_9); // PLL config 8*9=72 MHz   RCC_PLLMul_x(枚举2~16)是倍频值RCC_PLLCmd(ENABLE);//使能PLLwhile (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} //等待PLL输出稳定 //switch to HSERCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择SYSCLK时钟源为PLLwhile (RCC_GetSYSCLKSource() != 0x08) {} //等待PLL成为SYSCLK时钟源   
}void hardware_init_led(void)
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_StructInit(&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = LED_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//没有上拉也没有下拉GPIO_Init(LED_GPIO, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = TEST_PIN;GPIO_Init(TEST_GPIO, &GPIO_InitStructure);GPIO_SetBits(LED_GPIO, LED_PIN); //PA3常亮
}

led.h

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __LED_H
#define __LED_H/* Includes ------------------------------------------------------------------*/
#include "stm32f30x.h"
//#include "config.h"// test ***********************************************************#define TEST_GPIO                       GPIOA
#define TEST_PIN                        GPIO_Pin_2#define LED_GPIO                        GPIOA
#define LED_PIN                         GPIO_Pin_3/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
void hardware_init_all(void);
void hardware_init_rcc(void);
void hardware_init_led(void);#endif /* __LED_H */

完整的程序可私信我

三、调试过程

同时焊了两块板子,一块称为板L(有一个激光器和一个APD),一块称为板Z(没有激光器和APD),焊好所有器件后,向板L烧录点灯程序,verify ok后发现冒烟,立即断电,同时有闻到臭味,手触摸感觉激光器最烫,但是并没有对激光器的引脚做任何程序操作。

(一)测试板Z

1、将同样的程序烧录进板Z,看现象如何

用正点原子stm32f103精英板的5v输出给板Z供电,发现按下精英板的电源开关后,板子上的电源指示灯不亮。断开板Z和精英板的连接后按下精英板的电源开关,电源指示灯亮了。那说板Z的VIN和GND之间可能短路。
在这里插入图片描述
万用表调至欧姆档,VIN和GND之间的电阻只有3Ω左右,明显短路。
整个板子上VIN的网络只有这一块,我的第一反应是从VIN焊盘引线出来的时候,用焊笔刮的比较使劲,难道焊盘被刮坏了,顶层和信号层发生了串扰?
在这里插入图片描述

2、接下来检查了整个板Z上的焊接情况

发现一个虚焊的电阻,TDC芯片有引脚焊在一起的情况。
修改之后再次检查VIN GND之间的电阻,仍然只有几欧。

3、板Z上除了VIN还有VCC,把VCC的后续网络断掉

猜测可能是VCC和GND之间短路
在这里插入图片描述
拆掉5V转3.3V的芯片,再次测试,还是短路现象。
在这里插入图片描述
拆掉L10 R25 L9 L7 R28 L1,再次测试,还是短路现象。

4、板L和板Z对比的时候,发现栅极驱动器UCC27511的引脚焊接顺序不一样

怀疑板Z可能焊错了,拆掉这块芯片,再次测试板Z,VINGND之间仍然是短路的状态,我没辙了。
有请万能的男朋友隆重出场!

5、检查VIN附近的电路,把VIN的后续网络断掉,只留输入的部分

在这里插入图片描述
在这里插入图片描述
也就是断掉L4 C3,测试VINGND正常,阻值在千欧,电压为5v。

6、接上C3和LD1117,测试VCC

C7两端电压为3.3V

7、看MIC2288输出是否正常

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
万用表测试C9两端电压确实为13V左右。

8、再次向板L中烧录点灯程序

灯不亮,测试输出电压的大小,发现高电平只有0.7V。
在这里插入图片描述

9、测试单片机最小系统的供电是否正常

C27两端的电压为3.3V,供电正常

10、测其它引脚的电平

如PA0 PA1,也是0.几V左右,说明程序根本没起作用

11、断掉和最小系统连接的一切电路

L6 R2 R32
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
虽然没有对这些器件有程序上的操作,但这些器件每部的二极管三极管等数字器件可能会灌电流,拉低灯的电平。
但是!灯还是不亮,电压还是零点几伏,

12、猜测有可能是单片机的晶振出了问题

测试无源贴片晶振,逻辑分析仪观察到的波形很乱,示波器观察到的波形也不对。
一般情况下,无源晶振起振的波形为优雅的正弦波,通过示波器可以看到正弦波形,测量其频率应和晶振的起振频率一致。
更换新的晶振,波形仍然不对。
男朋友开始怀疑人生了,总不能一包晶振都是坏的吧!
测试精英板上的晶振波形,是正弦波没错,那可以排除示波器的问题。

13、不是晶振出了问题,是晶振附近的电路出了问题?

在这里插入图片描述
重新焊接 C25 C28,晶振波形终于对了。不过灯还是不亮,测灯的电压,3.3v,没问题啊

14、灯焊反了

在这里插入图片描述
有横线的这边是负极
在这里插入图片描述
灯终于亮了!
在这里插入图片描述

(二)测试板L

1、先拆掉板L上的激光器和APD,首先测试电源模块是否正常

正常

2、灯也不亮

按照板Z的处理方法,重新焊接了晶振附近的 两个电容,灯也亮了!

结语

结束一切工作回到宿舍已经是00:40,回顾这一天的工作,从下午三点开始到凌晨,就 点亮了个灯?!但是换个角度想想这些解决问题的思路和经验才是最宝贵的东西。
很感谢男朋友的温柔
在这里插入图片描述
在这里插入图片描述
祝大家都能有充实的生活,遇到温柔的人!


http://www.ppmy.cn/news/470428.html

相关文章

STM32F030开发日志之I2C

最近调试 一款 IQS333 电容触摸按键芯片IC,调了好几天发现I2C端口上没数据。最后追STM Clock tree 和STM 提供的I2C_Timing_Configuration工具解决了这个问题。现在分享给大家。 1. 首先我们观察Clock tree 查看 I2C clock source的缘由。 由 Clock tree可以得出I2C clock sou…

signature=694cde3d7f2450116894167453553a22,FIDO-U2F-Ledger 注册和登录过程中chrome和后台交互log分析...

注册流程 LOG Successfully registered device: No vendor metadata present! No device metadata present! Device transports: USB Registration Request javascript demo var request = {"appId":"https://localhost:8443","registeredKeys":…

使用命令行,一键修改文件夹所有文件修改日期改为最新

可以使用操作系统自带的命令行工具或者脚本来批量修改文件夹里面所有文件的修改日期。以下是两种常用的方法&#xff1a; 在 Windows 系统中使用 PowerShell 在 Windows 系统中&#xff0c;可以使用 PowerShell 来批量修改文件夹里面所有文件的修改日期。具体步骤如下&#xff…

Qt调试详细日志文件输出

qInstallMessageHandle安装消息&#xff0c;注册回调函数&#xff0c;对qDebug()、qWarning()、qCritial()、qInfo()、qFatal() 等函数输出信息重定向处理。 注明&#xff1a;以下方法仅适用于 Qt5 及以上版本。 目的&#xff1a;生成log.txt日志文件&#xff0c;记录详细日志…

Unity核心4——SpriteShape

Sprite Shape 是精灵形状的意思&#xff0c;它主要是方便我们以节约美术资源为前提&#xff0c;制作 2D 游戏场景地形或者背景的 ​ 在 Window --> Package Manager 中搜索 2D&#xff0c;选择 2D Sprite Shape&#xff0c;导入项目 一、Sprite Shape Profile 精灵形状概述文…

C51/C52--led流水灯、静态数码管

目录 一、led流水灯&#xff08;flowing water lamp&#xff09; 二、静态数码管 一、led流水灯&#xff08;flowing water lamp&#xff09; 我们在点亮一个led灯的基础上&#xff0c;对8个led灯按照某种特定的点亮规律进行操作&#xff0c;从而形成像水按顺序流动的效果。 …

【Android开发基础】手机传感器信息的获取

文章目录 一、引言二、了解1、概述2、关键 三、设计1、UI设计&#xff08;1&#xff09;主界面&#xff08;2&#xff09;适配器item 2、编码&#xff08;1&#xff09;获取数据&#xff08;传感器信息&#xff09;&#xff08;2&#xff09;渲染数据&#xff08;初始化适配器&…

iPhone13问题多,iPhone12价格贵,苹果用户难抉择

随着iPhone13到达部分用户手里&#xff0c;iPhone13的问题频出&#xff0c;导致部分消费者不喜欢这款新iPhone&#xff0c;转而将目光投向去年的iPhone12&#xff0c;然而让人愕然的是iPhone12价格竟然如此昂贵&#xff0c;导致消费者陷入两难抉择。 今年苹果推出的iPhone13可谓…