一、硬件原理图及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,回顾这一天的工作,从下午三点开始到凌晨,就 点亮了个灯?!但是换个角度想想这些解决问题的思路和经验才是最宝贵的东西。
很感谢男朋友的温柔


祝大家都能有充实的生活,遇到温柔的人!

基于stm32f303cbt6的点灯实验(硬件+软件)相关推荐

  1. 第五章 国产MCU 雅特力AT32F403A 基于v2库的点灯实验,位带操作控制,库函数控制

    目录 概述 硬件 软件 初始化gpio 相关代码: 库函数操作 相关代码: 位带操作 相关代码: 最后 概述 本文主要是使用AT32F403A开发板,基于V2库的点灯程序. 工程建立.调试工具配置在前 ...

  2. 基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的思路

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 这是一篇旧文,技术交流群有人在讨论这个问题,今天就来分享一下. 我们都知道硬件看门狗的目的:是用来监 ...

  3. matlab降噪报告,基于matlab主动降噪实验.docx

    基于matlab主动降噪实验 SHANGHAI JIAO TONG UNIVERSITY 实验三 主动降噪实验 指导老师:王旭永 小组成员:吴淑标 5110209352 汤剑宏 5110209355 ...

  4. 基于IIC的温度传感器实验

    基于IIC的温度传感器实验 一.IIC简介 二.硬件IIC与软件IIC的区别 三.实现I2CAHT20温湿度传感器的温度采集 1.AHT20简介 2.配置函数库,编写函数 1:下载驱动函数 2:修改相 ...

  5. JSP+SQL基于WEB的开放性实验管理系统设计与实现(源代码+论文+开题报告+中英文献+答辩PPT)

    毕 业 设 计(论文)任 务 书 毕 业 设 计(论文)任 务 书 毕业设计(论文)题目 基于WEB的开放性实验管理系统 毕业设计(论文)时间 毕业设计(论文)进行地点 毕业设计(论文)内容及要求:高 ...

  6. 《ZigBee开发笔记》第四部分 提高篇-第9章 CC2530基于GenericApp无线收发实验

    实验设备 硬件:PC 机一台:ZB2530(底板.核心板.仿真器.USB 线) 两套 软件:win7 系统,IAR 8.20 集成开发环境 本实验是基于GenericApp无线收发,编者在第2讲也有讲 ...

  7. 论文阅读笔记——基于CNN-GAP可解释性模型的软件源码漏洞检测方法

    本论文相关内容 论文下载地址--Engineering Village 论文阅读笔记--基于CNN-GAP可解释性模型的软件源码漏洞检测方法 文章目录 本论文相关内容 前言 基于CNN-GAP可解释性 ...

  8. 基于STM32F103ZET6库函数串口实验

    基于STM32F103ZET6库函数串口实验 本次实验实现如下功能 串口设置的一般步骤可以总结为如下几个步骤 与串口基本配置直接相关的几个固件库函数 1.串口时钟使能. 2.串口复位. 3.串口参数初 ...

  9. 基于PYQT编写一个人脸识别软件(2)

    前言 以前在博客:基于PYQT编写一个人脸识别软件 中给出了我自己用PYQT编写的一个小软件.鉴于使用的是开源库--face_recogniton,尽管使用很简单,但是还有些问题,比如:识别黄种人时效 ...

  10. 软件测试和系统试验,实验四 软件系统性测试

    <实验四 软件系统性测试>由会员分享,可在线阅读,更多相关<实验四 软件系统性测试(9页珍藏版)>请在人人文库网上搜索. 1.软 件 学 院上 机 实 验 报 告课程名称: 软 ...

最新文章

  1. 区块链之比特币的潜在激励
  2. [Spring cloud 一步步实现广告系统] 9. 主类和配置文件
  3. 技术久了,偶尔放松下吧,看看这些小样,很美好!
  4. html两条下划线重叠,文字和text-decoration:underline下划线重叠问题
  5. python多进程编程 多个函数并发执行_python并发编程之多进程编程
  6. 三十七、Java集合中的Hashtable
  7. wxWidgets:wxDialog类用法
  8. 信息系统服务器数量设置,《系统下服务器设置与优化.doc
  9. 深度学习之对象检测_深度学习时代您应该阅读的12篇文章,以了解对象检测
  10. [html] 实现一个居中半透明的模态窗
  11. 20155234 2016-2017-2 《Java程序设计》第5周学习总结
  12. Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结v2
  13. Altium Designer 学习笔记
  14. 数学建模笔记——评价类模型(三)
  15. 【使用R语言两行语句将搜狗词库转为csv格式】
  16. Android SVG矢量图/矢量动画、Vector和VectorDrawable矢量图及动画,减少App Size
  17. 【R】 Error in is.data.frame(x) : (list) object cannot be coerced to type 'double'
  18. 华东师范大学计算机专硕学硕,学硕?专硕?该怎么选择
  19. SSM框架体会和小结(短学期实训)
  20. haproxy 客户端真实IP地址添加白名单

热门文章

  1. IPQ8072A 如何通过AT指令跟SDX55交互
  2. 射灯安装方法图解_射灯安装图解
  3. 摸爬滚打DirectX11_day_11——三维天空
  4. “移动互联网+”第一股 正益移动登陆新三板
  5. 给设计师的建设性反馈
  6. 传递给printf的额外参数
  7. Linux运维——高级指令
  8. 通达信筹码循环指标源码 显示吸筹拉升出货的过程
  9. 欢乐颂之鸿蒙系统,化神前辈传要诀 《镇魔曲》鸿蒙指引全新上线
  10. Odoo集成Plausible埋码监控平台