stm32学习经历
- 格式:doc
- 大小:36.50 KB
- 文档页数:6
stm32实训报告经验总结STM32实训报告经验总结一、引言在这次STM32实训中,我深入了解了微控制器的基本原理和操作,学会了使用Keil MDK-ARM软件进行编程,掌握了STM32的GPIO、串口、定时器等基本外设的使用。
通过实际操作,我对于嵌入式系统设计和开发有了更深刻的理解。
二、实训过程1. 基础知识学习:首先,我通过阅读教材和网上资料,学习了微控制器的基本概念、STM32的体系结构和外设特性。
我了解到,STM32是一款功能强大的32位ARM Cortex-M核微控制器,具有丰富的外设接口和强大的处理能力。
2. 开发环境搭建:我按照教程安装了Keil MDK-ARM软件,配置了开发环境。
Keil软件提供了完整的开发工具链,包括代码编辑、编译链接、调试和仿真等功能。
3. 硬件平台搭建:我使用STM32开发板搭建了硬件平台。
我熟悉了开发板的电路原理图和引脚配置,了解了各个外设接口的使用方法。
4. 编程实践:在理解了基本概念和操作方法后,我开始进行编程实践。
我编写了GPIO输入输出、串口通信、定时器中断等程序,通过实际操作掌握了STM32的基本外设使用。
5. 调试与优化:在编程过程中,我遇到了许多问题,通过查阅资料和反复调试,最终解决了问题。
我还对程序进行了优化,提高了程序的效率和稳定性。
三、实训收获通过这次实训,我掌握了STM32微控制器的开发流程和基本外设的使用方法。
我学会了使用Keil MDK-ARM软件进行编程和调试,了解了嵌入式系统设计和开发的实际操作过程。
同时,我在实践中遇到了许多问题,通过解决问题,我提高了解决问题的能力。
四、展望未来这次实训让我对嵌入式系统设计和开发有了更深刻的理解。
在未来的学习和工作中,我将继续深入学习嵌入式系统的相关知识,掌握更多的技能和方法。
同时,我将尝试将所学知识应用到实际项目中,提高自己的实践能力和工程经验。
stm32实训心得体会篇一:STM32 实验2报告实验2MINI STM32按键控制LED灯实验一、实验目的1、掌握嵌入式程序设计流程。
2、熟悉STM32固件库的基本使用。
二、实验内容1、编程使用I/O口作为输入,控制板载的两个LED 灯。
2、使用固件库编程。
三、实验设备硬件: PC机一台MINI STM32开发板一套软件: RVMDK 一套Windows XP 一套四、实验步骤1、设计工程,使用固件库来编程设置。
、在这里我们建立一个文件夹为: STM32-Projects.点击Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹STM32-Projecst 之下,在这个目录下面建立子文件夹shiyan1, 然后定位到 shiyan1目录下面,我们的工程文件就都保存到shiyan1 文件夹下面。
工程命名为shiyan1, 点击保存.是这个型号。
、这里我们定位到STMicroelectronics 下面的STM32F103RB( 针对我们的mini 板子、弹出对话框“Copy STM32 Startup Code to project ?.”,询问是否添加启动代码到我们的工程中,这里我们选择“否”,因为我们使用的ST固件库文件已经包含了启动文件。
、接下来,我们在 Template 工程目录下面,新建3 个文件夹 CORE, USER,STM32F10x_FWLib 。
USER 用来放我们主函数文件 , 以及其他包括system_ 等等,CORE 用来存放启动文件等,STM32F10x_FWLib 文件夹顾名思义用来存放ST官方提供的库函数源码文件.、.打开官方固件库包,定位到我们之前准备好的固件库包的目录。
STM32F10x_StdPeriph_Lib_\Libraries\STM32F10x_StdPer iph_Driver 下面,将目录下面的src,inc 文件夹 copy 到我们刚才建立的STM32F10x_FWLib 文件夹下面。
stm32心得体会谈谈怎么学习stm32的感受1,首先对32要有一个大概的认识,了解它的引脚,最小系统,封装。
2,下载到官方库,对官方库的架构有一个大致的认识。
3,仔细阅读官方库里的外设函数的功能和使用。
(对时钟树一定要理解,其实也不复杂)4,然后我感觉,到这个地步后,就不需要人引导了,自己已经能够明白32是什么了。
补充1,网上视频多的是,多下载一些视频看看,知名的有野火正点原子,视频都可以免费下载,还有例程2,官方手册要多读,这是32一切资料的源头。
希望能帮到你我刚学STM32不久,总觉得STM32的固件库很繁琐,想自己定义库,不知道可行吗?刚学STM32不久的话,无论是学库函数还是直接操作寄存器都很难的,建议你还是先脚踏实地地去阅读STM32参考手册和Cortex-M3权威指南,然后慢慢地从点亮LED开始学起,可以分别用库函数和直接操作寄存器的写法来学习,看看有什么不同,然后再自己做自己的库函数。
个人建议,希望对你有帮助。
关于STM32学习的问题我也学习过mini stm32,大概说一下我对你的问题的看法如果你把《不完全手册》和相应的实验认真完成,做一些简单的小项目是不成问题的学习过程中的巧门算不上,就说是我的心得吧,那就是勤于思考,善于实践,如果把这两者和好的结合,学好它不成问题,祝你学习旅途愉快初学STM32的问题我也学习过mini stm32,大概说一下我对你的问题的看法如果你把《不完全手册》和相应的实验认真完成,做一些简单的小项目是不成问题的学习过程中的巧门算不上,就说是我的心得吧,那就是勤于思考,善于实践,如果把这两者和好的结合,学好它不成问题,祝你学习旅途愉快如何学习STM32。
我只买了最小系统。
买个仿真器。
自己试着做些 GPIO TIMER 等的例子,先从这些简单的例子入手。
然后逐步深入一个基于STM32的普通课程设计这个课题可不是一个简单的小课题,在这里讲讲就可以讲清楚的,具体要看你的这个PLC实现那些功能了哦。
stm32学习经历(5篇可选)第一篇:stm32学习经历随便写写,关于stm32 最近在学习stm32,写点东西,虽然简单,但都是原创啊开发板是前辈画的,好像是用来测试一个3G功能的,不过对于我来说太远;我要来了3个,自己焊了一个最小系统,好在公司资源还是不错的,器件芯片有,还可以问问前辈--对公司还是比较满意的,虽然工资少了点,但学东西第一位O(∩_∩)O~。
最开始当然是建工程了,这个真不太会,前前后后竟用了一周(时间真长,别见笑啊),上网查资料,问前辈,自己琢磨。
总算搞定,然后从GPIO开始学,开始还真没什么头绪(虽然在大学学点51,但完全没有真正应用,顶多是跑马灯实验),开始纠结是从寄存器开始学还是从库函数开始学,后来看到一句“用库函数入门,用寄存器提高”于是下定决心用库,但当时没有库的概念,结果走了很多弯路,看了很多不必要的东西,当时竟没理解到只是调用库就OK了,别的不用管。
最后潜心的在教程网看完一个例程后照猫画虎写了一个,经过了多次调试以后,灯终于亮了!那个兴奋啊。
再次还要感谢希望自己坚持下去,早日能写出一个属于自己的程序,完成一个说的过去的功能,下面把我的程序粘出来,和大家分享下,大虾看到了别见笑啊注:1.有两个灯,PA4 B12,都是低电平点亮2.有两个按键,PB8 和 PB9,按下是低电平3.程序开始后两个灯常亮,按下按键后熄灭,抬起后继续亮main.c中#include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_exti.h" void RCC_Configuration(void) //时钟配置函数{ ErrorStatus HSEStartUpStatus; //使能外部晶振RCC_HSEConfig(RCC_HSE_ON); //等待外部晶振稳定HSEStartUpStatus = RCC_WaitForHSEStartUp(); //如果外部晶振启动成功,则进行下一步操作if(HSEStartUpStatus==SUCCESS) { //设置HCLK(AHB时钟)=SYSCLK 将系统时钟进行分频后,作为AHB总线时钟RCC_HCLKConfig(RCC_SYSCLK_Div1); //PCLK1(APB1) = HCLK/2 将HCLK时钟2分频后给低速外部总线RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK2(APB2) = HCLK HCLK时钟配置给高速外部总线 RCC_PCLK2Config(RCC_HCLK_Div1); //外部高速时钟HSE 4倍频RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4); //启动PLL RCC_PLLCmd(ENABLE); //等待PLL稳定while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //系统时钟SYSCLK来自PLL输出RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //切换时钟后等待系统时钟稳定 while(RCC_GetSYSCLKSource()!=0x08); } // 下面这些都是外设总线上所挂的外部设备时钟的配置RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_AP B2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE); }void GPIO_Configuration(void) //GPIO配置函数{ //GPIO_DeInit(GPIOA); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;GPIO_Init(GPIOB,&GPIO_InitStructure); } void EXTI_Config(void) { EXTI_InitTypeDef EXTI_InitStructure; // 管脚选择GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource8);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9); // 清除 EXTI线路挂起位EXTI_ClearITPendingBit(EXTI_Line8|EXTI_Line9); // EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_Line = EXTI_Line8|EXTI_Line9; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } void NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; // 注意名称是“_IRQn”,不是“_IRQChannel”NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } int main(void) { RCC_Configuration(); GPIO_Configuration(); EXTI_Config(); NVIC_Config();while(1) { GPIO_ResetBits(GPIOB,GPIO_Pin_12); GPIO_ResetBits(GPIOA,GPIO_Pin_4); } } 中断文件 it.c中void EXTI9_5_IRQHandler(void) { if ( EXTI_GetITStatus(EXTI_Line8) != RESET ) { EXTI_ClearITPendingBit(EXTI_Line8);GPIO_SetBits(GPIOA,GPIO_Pin_4);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==0); } if ( EXTI_GetITStatus(EXTI_Line9) != RESET ){ EXTI_ClearITPendingBit(EXTI_Line9);GPIO_SetBits(GPIOB,GPIO_Pin_12);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0);勤劳的蜜蜂有糖吃} }第二篇:STM32入门经历,高手不要进!现在STM32初学入门,写些关于入门的帮助,也算答谢帮助过我的人.希望象我这样想学STM32的朋友不用迷茫.(本入门只适合低手,高手不要见笑).1.硬件平台.现在可以买到学习有的有英蓓特的MCBSTM32 和万利的EK-STM32F,可能目前出来最好的还是的神舟系列开发板,包括神舟I号(103RBT),神舟II号(103VCT),神舟III号(103ZET),神舟iv号(107VCT)几款都有,反正这几个板我都买了,学校出钱买的,还挺实惠,让老板打了个折扣,如果你自己开板做,成本还比这高.学会了才自己做自己的板子吧.2.软件平台.现在流行的有Keil MDK 3.15b和 IAR EWARM 4.42A. 购买评估板时,里面的光盘已经带了.为什么选这两个平台,用的人多,你以后遇到问题,可以找人解决的机会就大.英蓓特的MCBSTM32用的是Keil MDK 平台, 万利的是 IAR EWARM.3.C语言知识如果想补这推荐一本入门的书C Primer Plus 中文版.这本也是入门的好书.4.ST的数据手册STM32F10x参考手册看完这个就对STM32的内部有认识.STM32 Document and library rules 个人认为这个最重要.因为你学会了C语言看例程时.很多如GPIO_SetBits GPIO_ResetBits.很多C语言以外的函数库.这些都是STM32的库文件.5.看例程.如keil MDK 3.15b下的C:/Keil/ARM/Boards/Keil/MCBSTM32 有很多例程.GPIO口,RTC,PWM,USB,CAN等等....你想到的都有例程.6.多上论坛,呵呵.....有不明问下高手,我也是这样.只要不断努力,你一定会成功的.第三篇:STM32学习心得笔记STM32学习心得笔记时钟篇在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。
STM32学习体会STM32学习体会学习STM32也有一段时间了,周围的人也在学习这款单片机,感觉它是越来越流行,没办法,功能强大,又便宜,谁不愿意用呢。
搞不懂A VR,现在都快被挤兑成诺基亚了,还是死守价格不便宜!没学的就跳过啊,STM32,MSP430都是不错的选择因为暑假的时候学了MSP430,所以现在学STM32让我感觉很容易就上手了,相比51,主要是初始化更加繁琐了,没办法嘛,功能强大,寄存器就多,多了配置起来就复杂一些。
个人感觉一开始还是走寄存器路线,因为只有学懂了底层的东西才能更好的理解它的功能是怎么实现的,才能从中找出来捷径。
以后的话貌似还可以走库函数路线,那样可以大大的缩短开发周期。
几乎所有的单片机开始都是在介绍IO口,但是我感觉在此之前应该学习一下时钟,STM32的时钟使能分的HH特别细,每一个外设都有一个对应的时钟使能位,还有相对应的复位位,基本上都在RCC->APB1ENR,RCC->APB2ENR 两个寄存器里面,几乎初始化每一个外设之前,包括IO口,都要使能它的时钟,STM32还有一个后背区,当单片机复位的时候,这个区域是不会复位的,它的RTC模块只要有后备电源,即使单片机关机了,也可以给你提供大概136年的实时时钟计时!下面就是IO口了,它的IO口有8种模式,但是常用的就那么几种,推拉式输出,推拉式输入,复用功能等等,每四位控制一个IO口,最常用的就是0X8,0X3。
使能了时钟,设置好模式,就可以使用它的IO了,输出电平的高低就是控制ODR,输入就是读IDR,但是这两个寄存器只能整体访问。
但是STM32所有的位带操作为我们可以像操作51一样操作它的IO提供了可能,例如,如果要控制PA1这一位,只要对PAout(1),PAin(1)操作就行了,免去了数据的位运算!还有一点就是注意特殊IO,因为有的IO复位的时候默认是复用功能,如和JTAG有关的几个IO,如果你想把它当成普通IO使用,先把JTAG禁用了之后就OK了。
学习stm32工作总结学习STM32工作总结。
在过去的一段时间里,我一直致力于学习STM32微控制器的相关知识和技能。
通过不懈的努力和学习,我对STM32的工作原理和应用有了更深入的了解,并取得了一些进步。
在这篇文章中,我将总结我学习STM32的经验和收获,希望能够与大家分享。
首先,我深入研究了STM32微控制器的基本原理和架构。
我学习了STM32的内部结构、外设模块和寄存器的功能,以及如何通过寄存器编程的方式对STM32进行控制和配置。
这些知识为我后续的学习和实践打下了坚实的基础。
其次,我通过阅读官方文档和参考书籍,学习了STM32的编程方法和技巧。
我掌握了如何使用Keil、STM32CubeMX等工具进行STM32的程序开发和调试,以及如何编写C语言程序来实现对STM32的控制和应用。
同时,我还学习了如何使用HAL库和标准外设库来简化STM32的编程过程,提高开发效率。
除此之外,我还通过实际的项目实践,不断地提升自己的STM32应用能力。
我参与了一些STM32相关的项目,包括LED灯控制、温湿度监测、电机驱动等。
通过这些项目的实践,我对STM32的应用场景和实际开发经验有了更深入的了解,也提高了自己的问题解决能力和实际操作技能。
总的来说,学习STM32是一个不断探索和提升的过程。
通过系统的学习和实践,我对STM32的工作原理和应用有了更深入的了解,也积累了一定的实际经验。
在未来,我将继续深入学习STM32的相关知识和技能,不断提升自己的能力,为更多的STM32应用项目做出贡献。
希望我的学习总结能够对其他学习STM32的同学有所帮助,共同进步。
我的STM32艰苦入门经验体会与总结1.1为什么要把时间花在犹豫上?每当我们在入门之前(ARM是这样,DSP也一样),总会会有很多疑问,会有很多顾虑。
我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。
大家一般都是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?实际上都是先看书(理论),再玩板子(实践)。
严格地说,应该是模仿实验。
熟悉之后才会自己写程序代码实现某个功能。
因此,如果你正在咨询STM32;如果你正对STM32心潮澎湃;如果你想入门STM32;那么,从现在开始,不要犹豫了,不要想再详细地了解STM32的前景了。
做一个可能影响你一生的决定吧!不用咨询,不用兴奋,开始看书籍(文档)吧!!每个人都是这么走过来的。
1.2看资料需要计划、耐心和速度这里所谓的资料包括STM32书籍、文档。
因为STM32有个特点,datasheet很多都是中文的,有些同学就没有去买书籍,直接看STM32的用户手册,也是可以的。
但是不管看书籍还是文档,我们是需要计划的。
不是今天看3页,明天看5页。
一本书看了两个月,还在磨蹭。
请记住,你学的不是寂寞,是STM32!看书或文档不是用来消遣时间的。
背水一战吧,给自己规定一个底线:两周内把一定粗略地过一遍!不要求都看懂,事实上,不可能都看懂。
但我们必须理解基本知识,对难度高的知识有一个印象,至少以后碰到问题的时候,我们会似曾相识,感觉在哪里见到过,于是翻资料上网找答案带着问题。
基于stm32的智能锁设计实训周记基于STM32的智能锁设计实训周记第一周在第一周的实训中,我们开始了基于STM32的智能锁的设计和开发。
首先,我们对智能锁的基本原理进行了深入了解,明确了设计目标和需求。
智能锁是一种能够通过密码、指纹、刷卡等方式进行开锁的锁具,具有安全、便捷的特点。
我们的设计目标是开发一款稳定可靠、功能齐全的智能锁产品。
在了解了基本原理后,我们开始研究STM32开发板的使用方法。
我们学习了STM32的硬件架构、引脚功能和编程方式。
通过实际操作,我们掌握了如何使用Keil软件进行编程,如何通过串口与PC进行通信等基本技能。
第二周在第二周的实训中,我们开始进行智能锁的硬件设计。
首先,我们绘制了智能锁的电路原理图,确定了所需的传感器、电路保护和驱动电路等元件。
然后,我们进行了原理图的布局和连线,确保各个元件之间的连接正确可靠。
在硬件设计完成后,我们开始进行软件开发。
首先,我们编写了与电子锁驱动相关的代码,实现了锁的开启和关闭功能。
然后,我们编写了与密码输入和验证相关的代码,实现了密码的设置和验证功能。
最后,我们编写了与指纹识别模块和刷卡模块相关的代码,实现了指纹和刷卡的识别和验证功能。
第三周在第三周的实训中,我们进行了智能锁的调试和测试。
首先,我们对硬件电路进行了全面检查,确保没有短路和接触不良的问题。
然后,我们通过逐步调试的方式,检查了软件代码的正确性和稳定性。
在调试和测试过程中,我们发现了一些问题并及时解决了。
例如,刷卡模块的识别速度较慢,我们通过优化代码和调整硬件参数,提高了识别速度。
另外,指纹识别模块的准确率不高,我们通过调整指纹采集和识别的算法,提高了识别准确率。
第四周在第四周的实训中,我们进行了智能锁的性能优化和功能完善。
首先,我们对电路进行了优化,减少了功耗和体积,提高了整体性能。
然后,我们对软件代码进行了优化,提高了响应速度和稳定性。
在功能完善方面,我们增加了远程控制功能,通过手机APP可以实现对智能锁的远程开锁和监控。
关于stm32机械臂的实习报告下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!实习报告:关于STM32机械臂的实习经历1. 简介在实习期间,我有幸参与了一项关于STM32微控制器的机械臂项目。
STM32使用心得第一篇:STM32使用心得stm32使用心得第一次使用stm32,以前用过51、avr、pic、2812,感觉stm32还真有点不一样,呵呵。
因为是第一次使用,下面说的肯定有不少错误,诚心求大家指正。
这次做的是用stm32f103zd+lattice 的lc4256v做一个波形发生器。
通过上位机可以控制生成波形的频率,然后stm32根据频率计算波形占空比数据,通过总线形式传给cpld,然后cpld把这些数据转换成相对应占空比的pwm输出,外部接RC滤波电路,产生相对应的波形。
由于频率范围较大,计算量也比较大,所以采用了stm32+cpld 的结构。
Stm32运行在72MHZ,通过mco脚给cpld 36M HZ的时钟,stm32和cpld通过总线方式通信。
此系统中Stm32主要用到的资源是:一个UART,一个TIMER及其中断,FSMC和DMA。
本人总结了下,Stm32初始化一个片内外设一般过程一般有以下几部分:1.InitStructure配置及初始化2.时钟使能3.相对应的IOInitStructure配置及初始化4.相对应的IO时钟使能5.外设使能6.中断配置及中断程序编写下面介绍一下自己所用的UART、TIMER、FSMC、DMA的初始化。
UART初始化:此系统中使用的是UART2,未用UART中断。
UART初始化主要有:IO初始化,UART InitSturcture初始化,UART时钟使能,UART 使能。
程序如下: GPIO_InitTypeDef GPIO_InitStructure;// Configure USART2_Tx as alternate push-pullGPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);// Configure USART2_Rx as input floatingGPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);//IO时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);USART_InitTypeDef USART_InitStructure;/* USART2 configured as follow:-BaudRate = 9600 baud-Word Length = 8 Bits-One Stop Bit-No parity-Hardware flow control disabled(RTS and CTS signals)-Receive and transmit enabled*/USART_ART_BaudRate = 9600;USART_ART_WordLength = USART_WordLength_8b;USART_ART_StopBits = USART_StopBits_1;USART_ART_Parity = USART_Parity_No;USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx;/* Configure the USART2*/USART_Init(USART2, &USART_InitStructure);//UART时钟使能RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);/* Enable the USART2 */USART_Cmd(USART2, ENABLE);TIMER初始化使用的是TIM2。
stm32心得体会作为一名工程师,我有幸接触到了STM32微控制器,这是一款功能强大且广泛应用的微控制器。
在使用STM32过程中,我获得了许多宝贵的经验和体会。
首先,STM32的灵活性给开发者带来了巨大的便利。
不同于其他微控制器,STM32具有丰富的外设和引脚资源。
无论是控制器与其他外部设备的通信,还是为外部设备提供驱动,STM32都能够满足需求。
开发者可以根据具体应用的需求,选择适合的外设和引脚配置,实现各种功能。
这种灵活性使得STM32在不同领域的应用中都能够发挥重要作用。
其次,STM32的强大性能为开发者提供了良好的开发环境。
STM32的处理器核心采用了ARM Cortex-M系列,具有高性能和低功耗的特点。
这使得开发者能够编写高效的代码,在保证系统正常运行的同时,尽量减少对处理器资源的占用。
此外,STM32还配备了丰富的存储器,开发者可以根据需要选择适当的存储器类型,保证代码和数据的高效运行。
最重要的是,STM32具有强大的软件生态系统。
STMicroelectronics提供了丰富的开发工具和软件库,包括STM32CubeIDE、STM32Cube软件包等。
这些工具和软件库不仅提供了开发环境和调试功能,还提供了丰富的示例代码和驱动程序,帮助开发者快速实现功能。
此外,STM32社区也是一个宝贵的资源,开发者可以在社区中交流经验、解决问题,共同进步。
在使用STM32的过程中,我还注意到了一些需要注意的问题。
首先,由于STM32具有强大的功能和丰富的外设,开发者需要仔细阅读相关文档,并了解各个外设的使用方法和限制条件。
这样才能充分发挥STM32的强大功能,并避免在应用中出现问题。
另外,由于STM32的引脚资源有限,开发者需要合理规划引脚的使用,以确保各个外设之间的互不干扰。
总之,STM32是一款功能强大且灵活易用的微控制器。
它提供了丰富的外设和引脚资源,具有强大的性能和良好的开发环境。
在使用STM32的过程中,我们需要充分发挥其优势,合理规划外设和引脚的使用,同时借助STMicroelectronics提供的开发工具和软件库,使得开发工作更加高效和便捷。
stm32学习总结学习总结单片机学习经历总结自从大二寒假接受了一次初始培训开始,我便开始了单片机的学习,一开始借了一块MS430G255的板子,于是便从MS班始学习单片机.一开始的我对于单片机一窍不通,只能对照着数据手册学习,逐渐开始了解什么是IO口,中断,定时器,AD转换等.开学来了以后接受了四次培训,期间又重新熟悉这些模块并在学长指导下开始写了一些程序作为练习.后续的学习中我在串口通讯这里遇到了很大阻碍,不太能理解其中的含义,网上的解释又不太看得懂,便找了一些STM32的视频来学习串口,期间发现51和MS5经不是主流的板子了,现在的厂商更多的是用STM3型样的板子,于是后来的学习重心开始放到了STM32,由于有了前面的根底,这次从头的学习就更加容易理解STM32的原理与使用了.MS430G2553些模块的总结(1).io口模块,1.我们实用的MS430G255宥两组IO口,是1和XXX口的存放器有:方向选择存放器_DIR,输出存放器_OUT输入存放器_IN,IO 口内部上拉或下拉电阻使能存放器_RENIO功能选择存放器_SEL和_SELZIO中断使能存放器_IE,中断沿选择存放器_lES,IO口中断标志存放器_lFGo3.所有的IO都带有中断,其中所有的1公用一个中断向量,所有的2公用一个中断向量.所以在使用中断时,当进入中断后,还要判断到底是哪一个IO产生的中断,判断方法可以是判断各个IO口的电平.4.中断标志_IFG需要软件去除,也可以用软件置位,从而用软件触发一个中断XXX:如果引脚选择了内部的上拉或下拉电阻使能,那么_OU 似定电阻是上拉还是下拉,0:下拉,1:上拉(2).时钟系统XXX的时钟源有:(1).外接低频晶振LF_T1CLK低频模式32768Hz,高频模式450KHz8MHz(2).外接高速晶振_T2CLK8MHz(3).内部数字限制振荡器DCO(4).超低功耗低频振荡器VLO2.时钟模块:430的时钟模块有MCLKSMCLKACLK:(1).主系统时钟MCLK提供应MS430勺CU寸钟.可以来自LF_T1CLK_T2CLKDCOVLO可选,默认为DCO(2).子系统时钟SMCLK提供应高速外设.可以来自LF_T1CLK_T2CLKDCOVLO可选,默认为DCO(3).辅助系统时钟ACLK:提供应低速外设.可来自LF_T1CLKVL0S一个网上找到的比拟严谨的延时程序/#defineCU_R(double)160XXXX0000)/cufrequency160XXXX0000#define CU_R(double)1于000)/cufrequency1于000#definedelay_us(_)_delay_cycles(long)(CU_F_(double)_/XXX.0)#defin edelay_ms(_)_delay_cycles(long)(CU_F_(double)_/1000.0)(3).定时器XXX具有两个16位的定时器:Timer0_ATimer1_A.分别具有三个捕捉/比拟寄存器,具有输入捕捉,输出比拟功能.可以产生定时中而,也可以产生XXX的捕获/比拟存放器,当为捕获模式时:当捕获发生时,把TAR的值装载到TACCR_K当为比拟模式时:TACCR沛装的是要与TAR存放器相比拟的值.(四)XXX是十位的AD,在g2553上有A0A7八个可以外接的AD通道,A10接到片上的温度传感器上,其他的通道都接在内部的VCC或GND!XXX 的采样方式有:单通道单次采样,单通道屡次采样,多通道单次采样,多通道屡次采(五)UART这个模块这要设置好几个限制存放器,设置波特率,写几个收发函数就可以了.STM3殍习的总结STM32的使用与MS%同,它可以使用固件库来写程序,使得编写的难度与复杂度大大降低,但是在学习阶段我也必须了解它们的底层的具体存放器来帮助我更好的了解与学习.在之前的学习中我学习了它的XXX的配置和使用,2.中断的使用,3.如何配置系统时钟,XXX的配置和使用,6.根本定时器和高级定时器,XXX的配置和使用.由于这些模块的一些参数比拟长和复杂,局部和MSM些相似.而且它的配置有具体的固件库格式很容易了解,在这里我就不一一列举了.在学习过程中遇到的一些问题和对板子的看法XXX在学习MS430勺过程中,对于如何配置中断是我一开始遇到的一个很大的问题,我对它的中断使用格式有些混淆,随后在网上查询使我解决了这类问题.后来在编写程序的练习中对于中断的开关也出现过问题,后来发现不能用BIS_SR(LM0_bits+GIE)这样,不然会导致CI#眠,最好用_ENIT().在程序编写中对于循环的嵌套是个必须要注意的点,很容易出现错误.对于MS430G255眩个板子,它是低功耗的板子,但是IO口太少,对于做一些作品有很大限制XXX学习STM3井我用的是这款板子,它上面有7个GIQ3个ADC5个串口,对于现在的我做一些小作品来说是完全足够了.在学习和使用的过程中对于USART勺使用尤为重要.之前做一个程序同时翻开了串口1和串口2但是串口1接受的数据发送给电脑却不能通过电脑发送给串口2,是由于其中发生了溢出中断,没有清楚OR6导致卡住了.在STM32的学习中要更仔细并多看数据手册,遇到问题也要多在网上询问,这样才能提升自己。
学习stm32工作总结学习STM32工作总结。
作为一名嵌入式系统工程师,学习STM32是必不可少的一项技能。
在过去的一段时间里,我花了大量的时间和精力来学习STM32,并在实际项目中应用了这些知识。
在这篇文章中,我将总结我学习STM32的经验和心得,希望对其他初学者有所帮助。
首先,学习STM32需要对嵌入式系统有一定的了解。
了解嵌入式系统的基本原理和结构对于学习STM32是非常重要的。
此外,对于C语言的基础知识也是必不可少的,因为在STM32的开发过程中,大部分的代码都是用C语言来编写的。
其次,学习STM32需要有一定的电子电路知识。
因为STM32是一款微控制器,它需要和外部的电路进行连接才能发挥其功能。
因此,了解一些基本的电路知识对于学习STM32是非常有帮助的。
在学习STM32的过程中,我发现了一些学习的方法和技巧。
首先,我建议初学者可以通过阅读官方的文档和手册来了解STM32的基本知识和功能。
其次,可以通过一些开源项目来学习STM32的应用,这样可以更快地掌握STM32的开发技巧和方法。
另外,可以通过一些在线的教程和视频来学习STM32的开发,这样可以更直观地了解STM32的使用方法。
在实际项目中应用STM32的过程中,我也遇到了一些问题和挑战。
例如,在连接外部设备时需要考虑到时序和电气特性,这需要对外部设备有一定的了解。
另外,在调试和优化代码的过程中也需要一定的耐心和技巧。
总的来说,学习STM32是一项非常有挑战性的任务,但是通过不断的学习和实践,我相信每个人都可以掌握STM32的开发技能。
希望我的经验和总结可以对其他初学者有所帮助,也希望大家可以在学习STM32的过程中不断进步和成长。
STM32 学习经验总结
1. 今天把普中开发板上的RS232 芯片烧坏了,所以接下来要完成stlink 的使用,来下载程序,同时也尝试调试程序,也算是被逼的去学一个很有用
的工具,本来我都不想学stlink 的。
2. 先学习一下STM32 的定时器,过程中,加入stlink 的下载和调试。
3. 定时器:STM32 分高级定时器(TIM1 和TIM8),通用定时器(TIM2-5),基本定时器(TIM6,7)。
4. 通用定时器(TIM2-5):1)位于低速APB1 总线上。
2)预分频:将计数器时钟频率降低。
3)各个通用定时器之间是完全独立的。
4)向上计数:从0 到
加载值,其他类似。
5)定时器的时钟来源,可以来源于内部的APB1 时钟倍
频提供,这是时钟来源之一,但是用的比较多,也比较简单。
5. 通用定时器工作过程,只要有印象就可以,在配置的时候知道在配置什幺。
6. 这是时钟的计算方法,其中APB1 的时钟来源于AHB,如果APB1 = AHB,也就是APB1 = 1 * AHB,那幺,此时的CK_INT = APB1,而如果APB1 = AHB / 2,那幺这时候CK_INT = 2 * APB1 的时钟,得到定时器的原始时钟。
stm32心得体会我使用STM32微控制器进行项目开发的经验已经超过一年了。
我通过这段时间的使用和学习,对STM32的性能和特点有了更深入的理解。
下面是我使用STM32的心得体会。
首先,STM32具有强大的处理能力。
它采用了Cortex-M系列的ARM内核,具有高速的时钟频率和丰富的内存空间,使得它能够处理复杂的任务和多个外设的同时操作。
我在实际的开发中,使用STM32处理各种传感器数据、驱动各种执行器等,都能够得到良好的性能。
同时,STM32还支持多核、多任务的处理方式,进一步提高了系统的处理能力。
其次,STM32具有丰富的外设资源。
它具有多个GPIO口、定时器、串口通信接口、I2C、SPI等多种外设,能够满足各种应用的需求。
我在实际的项目中,经常需要使用到串口通信、定时器和GPIO口等,STM32提供了非常简洁方便的API,使得开发工作变得更加简单高效。
同时,STM32还支持中断机制和DMA传输,大大提高了系统的响应速度和数据传输效率。
此外,STM32还具有丰富的开发工具和生态系统。
ST官方提供了STM32CubeMX软件,能够快速生成初始化代码和配置文件,大大提高了开发的效率。
同时,ST还提供了丰富的开发文档和示例代码,以及一系列的开发板和调试工具,方便开发者进行硬件测试和调试。
此外,STM32生态系统还有许多第三方库和开发工具,丰富了开发者的选择和功能。
最后,我认为使用STM32进行开发具有较高的学习门槛。
由于STM32架构较为复杂,对硬件和软件的理解要求较高。
同时,STM32的开发工具和文档也相对复杂,需要一定的学习成本。
对于初学者来说,建议先了解一些基本的电子和嵌入式系统知识,再进行STM32开发。
但是一旦熟悉了STM32的开发流程和API,就能够快速进行项目开发。
综上所述,STM32作为一款强大的微控制器,具有高性能、丰富的外设资源和完善的开发工具,非常适合用于嵌入式系统的开发。
我通过使用STM32进行项目开发,不仅提高了技术水平,也获得了一些实际的应用经验。
1.首先我们先看看与STM32相关的文档我们假定大家已经对STM32的书籍或者文档有一定的理解。
如不理解,请立即阅读STM32的文档,以获取最基本的知识点。
如果你手上拥有ST官方主推的STM32神舟系列的板子,那么光盘都会配好这些文档,STM32的学习与ARM9的学习有一个很大的区别。
ARM9的学习一般是需要购买书籍的。
比如三星的S3C2440,官方的文档都是英文的,大部分工程师只能去看国内出版的书籍。
英文好的同学,请不要以为你很牛,可以只看英文文档。
毕竟你是中国人,你最熟悉的,理解最好的还是中文。
看英文的速度还是比看中文慢一些,我们要的是最短的时间,而不是追求短时间内记住所有细节。
当然,如果是一篇论文,建议看英文原版还是有好处的。
STM32处理器进入国内市场时候,ST官方(或者第三方)的推广工作做的非常好。
翻译了大量的英文文档,迎合了国内的很多工程师的思维。
神舟系列的开发板就是迎合这种中国化,本土化,方便学习和使用;所以现在大部分STM32F103xxx的用户datasheet都有中文版,例子也很齐全,因此可以不用去购买书籍,看电子档即可。
学习的时候,关注两个比较重要的文档:《STM32F103xxx参考手册》,《STM32固件库使用手册》。
该网址,是针对有充足的时间、精力的同学,建议去下载需要查阅的文档,以获取更多信息。
阅读《STM32F103xxx参考手册》,一定要注意,不需要全部阅读——没有时间的。
建议选读,但是前几章必读。
存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和时间等等前几章一定要花时间阅读。
后面章节,讲述的是具体的功能模块设计。
如果我们用到哪个模块,就可以去阅读哪个模块。
比如在使用AD的时候,就需要去阅读第10章ADC。
其他不举例。
相信每个初学者都有自己的研究方向和判断。
阅读《STM32固件库使用手册》,主要是为了简化编程。
STM32给我们提供了一个非常好的固件函数库,我们只要去调用即可。
STM32学习小结其实到今天,从茫茫然到知其然的过程颇为艰辛,算是知道点了门道但是在电子所的日子也进入了倒计时。
想想也总算从开始的躲避到现在的坦然接受,隐约中还有一丝喜欢。
人总要摆脱舒适,去适应一个陌生的环境。
当你坚持下来的时候,一切迷茫、纠结、奔溃都是值得的。
没有坚持博客是因为上次编辑了三遍,整整三遍,CSDN抽风,电脑抽风,每次都没保存就退出,我整个人都不好了。
在此推荐一下我的入门方法:1.一块STM32板子;2.《cortex m3权威指南》,《STM32中文参考手册》,《STM32库函数开发指南》3.能上网的笔记本。
OK,刚开始可能什么都不懂,没关系,根据你买的板子附赠的例程,用Keil去编译,烧录程序,然后看看板子上的现象。
这是第一步,建立感性认识。
比如跑马灯,也就是两个灯交替闪烁,用到的资源就是LED。
那么对硬件有了简单的认识之后,再去读代码,看看主函数都调用了什么东西,对于GPIO 的配置,刚开始看或许什么都不理解,那就多看看,用本子把各个寄存器都记下来,然后对着代码里面对GPIO的配置一点点去标注,一遍没有印象,可以缓缓,Once again,直到你能清晰知道原理为止。
第二步,就拿上面三本书来说,去掌握STM32结构。
这么说可能很空洞,因为我也还没到那种程度。
举个例子,比如上述GPIO 的时钟,为什么要在APB2上进行使能,定时器TIM,可以干嘛,需要在APB1还是APB2上使能?端口复用和重映射是干嘛用的?为什么要用USB_232口烧录程序而不是USB_Slave口呢?两者有何不同,USB到底是什么?就类似于这样看似很小,但是又关乎整体的小东西,一点点去看。
库函数开发指南会简单介绍一下,而详细的东西还得靠另外两本书。
所以,多读书,还是有好处的。
第三步,“修改”代码。
比如按键输入,你要是一直按着,那么就会一直输入很多按键的值,111111111....。
比如在生活中打电话,对于老人来说,可能没有年轻人这么敏捷的身手,那么打电话139,按照连续输入,就可能是1111113333333333399999,这样子很明显不是人们期望的。
stm32平衡车实训总结
STM32平衡车实训是一项非常有意义的实践活动,通过这个实训,我学习了STM32微控制器的基础知识和应用,掌握了平衡车的基本原理和控制方法,同时也提高了我的动手能力和团队合作能力。
以下是我对这次实训的总结:
1.理论知识的学习
在实训前,我已经学习了STM32微控制器的基础知识,但在实训中,我更加深入地了解了STM32的内部结构、指令集和外设接口等方面的知识,同时也了解了平衡车的工作原理和控制方法。
2.动手实践的经验
在实训中,我亲手搭建了平衡车的硬件电路,编写了控制程序,调试了各个模块的工作状态,并最终完成了平衡车的组装和调试。
这个过程让我更加深入地理解了STM32的应用,也锻炼了我的动手能力和问题解决能力。
3.团队合作的体验
在实训中,我们组成了一个团队,共同完成了平衡车的设计和制作。
在团队合作的过程中,我们相互协作、互相帮助,充分发挥了各自的优势,共同完成了实训任务。
这个过程也让我更加了解了团队合作的重要性和技巧。
总之,STM32平衡车实训是一次非常有意义的实践活动,通过这个实训,我不仅学习了STM32的基础知识和应用,还锻炼了自己的动手能力和团队合作能力,同时也对平衡车的工作原理和控制方法有了更加深入的了解。
学习stm32工作总结学习STM32工作总结。
作为一名嵌入式系统工程师,学习STM32是必不可少的。
在过去的一段时间里,我深入学习了STM32的工作原理和应用,积累了一定的经验,现在我想对这段学习经历进行总结。
首先,学习STM32需要对其硬件结构有一定的了解。
STM32是一款基于ARM Cortex-M内核的微控制器,具有丰富的外设和功能模块。
了解其内部结构和各个外设的工作原理,对于编程和应用开发是至关重要的。
在学习过程中,我通过阅读官方文档和参考资料,逐步掌握了STM32的硬件知识,包括GPIO、定时器、串口通信等模块的使用方法。
其次,学习STM32需要熟练掌握其编程语言和开发环境。
STM32通常使用C语言进行编程,同时需要借助Keil、IAR等集成开发环境进行代码编写和调试。
我通过实际的项目实践,逐渐熟悉了STM32的编程语言和开发环境,能够独立完成简单的应用程序开发和调试工作。
最后,学习STM32需要不断的实践和总结。
在学习的过程中,我通过参与项目实践,积累了丰富的经验。
在实际的项目中,我遇到了各种各样的问题和挑战,但通过不断的思考和总结,我逐渐掌握了解决问题的方法和技巧。
同时,我也通过阅读相关的技术文档和参考资料,不断地扩充自己的知识面,提高了自己的技术水平。
总的来说,学习STM32是一个不断积累经验和提升能力的过程。
通过深入学习和实践,我逐渐掌握了STM32的工作原理和应用方法,提高了自己的技术水平。
我相信,在今后的工作中,我会继续努力学习,不断提升自己的能力,为公司的项目开发和应用提供更加优质的技术支持。
随便写写,关于stm32 最近在学习stm32,写点东西,虽然简单,但都是原创啊开发板是前辈画的,好像是用来测试一个3G功能的,不过对于我来说太远;我要来了3个,自己焊了一个最小系统,好在公司资源还是不错的,器件芯片有,还可以问问前辈--对公司还是比较满意的,虽然工资少了点,但学东西第一位O(∩_∩)O~。
最开始当然是建工程了,这个真不太会,前前后后竟用了一周(时间真长,别见笑啊),上网查资料,问前辈,自己琢磨。
总算搞定,然后从GPIO开始学,开始还真没什么头绪(虽然在大学学点51,但完全没有真正应用,顶多是跑马灯实验),开始纠结是从寄存器开始学还是从库函数开始学,后来看到一句“用库函数入门,用寄存器提高”于是下定决心用库,但当时没有库的概念,结果走了很多弯路,看了很多不必要的东西,当时竟没理解到只是调用库就OK了,别的不用管。
最后潜心的在教程网看完一个例程后照猫画虎写了一个,经过了多次调试以后,灯终于亮了!那个兴奋啊。
再次还要感谢/mcu/1106.html 的作者他写的GPIO使用方法让我少走了很多弯路,接着学的EXTI,当时对中断的理解只是概念上的,也不知道中断程序要放在中断函数里(it.c),总之现在想想当时怎么那么不开窍啊。
慢慢的中断也弄出来了,一会我会把程序贴出来,很简单的嘿。
慢慢的有点感觉找到门了:先大致看一下要学习概要,找个例程,一个函数一个函数的看,重点理解配置的什么,参数,然后在头脑中形成一个大概的轮廓,虽然有时候不是特别清晰;接着学习TIMER(通用定时器),只是学习了最简单的溢出中断,其他捕获什么的都还没有看呢--想先对stm有个总体的学习,下一步准备每个模块细细“研读”。
应用定时器溢出中断做了个闪灯小程序;接着顺便把学习过的GPIO,EXTI,TIMER混在一起做了一个优先级(NVIC)的程序,以来了解下优先级,二来对前面的学习是一个复习,虽然很简单,但没能一下子就调出来--其实每次都会在细节上出不少差错:时钟忘使能啦,GPIO没有配置全啦,名称写错啦(很低级,但这个有时候真的不好找),概念理解不对啦。
有时候憋的真是相当难受,但问题解决的那一刻真怎是一个“爽”字了得啊,当然前提是自己解决的;接下来学USART(串口),原来我也不知道有串口这么个东西,但弄单片机的要是不知道“串口”就好比开车的不知道轮胎一样了,开始完全没有概念,什么波特率啊,奇偶校验位啊,停止位啊,对着一堆名词看着都头大。
慢慢的了解到串口是一种通讯传输方式,就和USB一样,只是串口比USB早出生好多年。
这时候已经有点门了,看概念,抄例程,看函数,理解,根据自己的理解改参数,实现!学会了串口,以后就可以通过串口来观察数据了(我的实验板可是没有屏的);下一个是DMA,DMA可是个好东西,至于怎么好,百度一下,大家就知道了;下来ADC(模数转换),就是把模拟量转化成数字量,据说stm之所以强大,ADC算一个重要条件,我只是简单了应用了一个测电压的功能(可以说是ADC 的最简单功能了),用串口显示探针(自己焊上去的)所测到的电压值,主要卡在了两个地方:1忘记配置串口的GPIO(所以一定要注意细节,一个细节能憋我1天) 2对通道的理解不够,原以为通道自己找串口(现在发现自己挺天真的),实际是每个通道对应自己的GPIO 口,或模块(如温度传感器),“一知半解”又让我卡了1天。
解决这两个问题后,串口赫然出现数字啦,而且是探地是0,探电源是33xx(3.3V的),还真准呢啊;现在在学习I2C(刚刚开始看),还在看概念。
希望自己坚持下去,早日能写出一个属于自己的程序,完成一个说的过去的功能,下面把我的程序粘出来,和大家分享下,大虾看到了别见笑啊注:1.有两个灯,PA4 B12,都是低电平点亮2.有两个按键,PB8 和 PB9,按下是低电平3.程序开始后两个灯常亮,按下按键后熄灭,抬起后继续亮main.c中#include "stm32f10x.h"#include "stm32f10x_gpio.h"#include "stm32f10x_rcc.h"#include "stm32f10x_exti.h"void RCC_Configuration(void) //时钟配置函数{ErrorStatus HSEStartUpStatus;//使能外部晶振RCC_HSEConfig(RCC_HSE_ON);//等待外部晶振稳定HSEStartUpStatus = RCC_WaitForHSEStartUp();//如果外部晶振启动成功,则进行下一步操作if(HSEStartUpStatus==SUCCESS){//设置HCLK(AHB时钟)=SYSCLK 将系统时钟进行分频后,作为AHB总线时钟RCC_HCLKConfig(RCC_SYSCLK_Div1);//PCLK1(APB1) = HCLK/2 将HCLK时钟2分频后给低速外部总线RCC_PCLK1Config(RCC_HCLK_Div2);//PCLK2(APB2) = HCLK HCLK时钟配置给高速外部总线RCC_PCLK2Config(RCC_HCLK_Div1);//外部高速时钟HSE 4倍频RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);//启动PLLRCC_PLLCmd(ENABLE);//等待PLL稳定while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//系统时钟SYSCLK来自PLL输出RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//切换时钟后等待系统时钟稳定while(RCC_GetSYSCLKSource()!=0x08);}// 下面这些都是外设总线上所挂的外部设备时钟的配置RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph _AFIO, ENABLE);}void GPIO_Configuration(void) //GPIO配置函数{//GPIO_DeInit(GPIOA);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;GPIO_Init(GPIOB,&GPIO_InitStructure);}void EXTI_Config(void){EXTI_InitTypeDef EXTI_InitStructure;// 管脚选择GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9); // 清除 EXTI线路挂起位EXTI_ClearITPendingBit(EXTI_Line8|EXTI_Line9);//EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_Line = EXTI_Line8|EXTI_Line9;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);}void NVIC_Config(void){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; // 注意名称是“_IRQn”,不是“_IRQChannel”NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}int main(void){RCC_Configuration();GPIO_Configuration();EXTI_Config();NVIC_Config();while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_12);GPIO_ResetBits(GPIOA,GPIO_Pin_4);}}中断文件 it.c中void EXTI9_5_IRQHandler(void){if ( EXTI_GetITStatus(EXTI_Line8) != RESET ){EXTI_ClearITPendingBit(EXTI_Line8);GPIO_SetBits(GPIOA,GPIO_Pin_4);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==0);}if ( EXTI_GetITStatus(EXTI_Line9) != RESET ){EXTI_ClearITPendingBit(EXTI_Line9);GPIO_SetBits(GPIOB,GPIO_Pin_12);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0);勤劳的蜜蜂有糖吃}}。