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,写点东西,虽然简单,但都是原创啊开发板是前辈画的,好像是用来测试一个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);勤劳的蜜蜂有糖吃}}。