ImageVerifierCode 换一换
格式:DOC , 页数:35 ,大小:1.13MB ,
资源ID:8776031      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8776031.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STM32f103C8T6入门学习记录.doc)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

STM32f103C8T6入门学习记录.doc

1、STM32 自 学 笔 记 作者:忙碌的小姚 新浪微博:忙碌的小姚 新浪博客: 目录STM32 自 学 笔 记1第一章3我与STM32 的那些日子3第二章4使用固件库建立一个工程41、了解STM32F103的固件库42、创建第一个工程43、接下来就是管理工程文件了94、编写main.c 和文件路径10第三章14STM32点亮第一个LED 使用keil for ARM MDK 软件仿真141、Main.c 函数代码:142、代码分析:153、软件仿真介绍:16第四章19串口的使用191、为什么要用串口?192、STM32跟PC机(也就是电脑)如何连接193、代码分析204、仿真及调试235、串口

2、接收数据25第五章27通用定时器的使用271、STM32F103内部定时器有哪些?272、如何进行程序编写273仿真结果观察304对第四章串口的补充315工程代码35第一章 我与STM32 的那些日子 STM32这块板子是在阿莫上跟一个老师买的,砍了半天100块钱。包括一个Jlink v8仿真器(好像65块左右),和一块STM32系统板。那已是一年前的事了。那时我刚大三,刚学了半年51,于是想学点更高级的。但我好像属于三分钟热度的这种人,买回来学了一个星期,就学不动了,寄存器操作,固件库的使用根本就没明白是怎么一回事,之后就没有然后了。现在看到那块板子,总有一种说不出的滋味,要是当时能咬牙切齿

3、努力学习,说不定现在也不会安静地坐在电脑前一字一句敲打这篇激励性文章了。对于STM32我没用任何基础,唯一有的也只是一年前学的那一个星期,不过那已不重要了,我现在仍是一个小白。作为一个初学者,也许是坐井观天,看的是片面的,可能有很多观点是错误的,希望读者朋友能勇于指出来。 -前记第二章使用固件库建立一个工程我打算先从软件编程学起,以前用过KEIL 和IAR,IAR我比较熟悉,因为参加电子设计竞赛的时候,就是用它编程MSP430程序的。但我还是选择了KEIL,也许因为资料比较多,或者别的吧,我没分析过KEIL 和IAR代码效率如何,因为这不是我现在要考虑的,软件都只是工具而已。我去百度搜索了几篇

4、如何在KEIL MDK环境下建立STM32工程,加上自己的实践。我也把我的初学者步骤贴出来。1、了解STM32F103的固件库我在网上下了STM32F103的固件库-stm32f10x_stdperiph_lib 3.5V版的,里面内容如图所示,据说STM32F103和STM32F101都能用。2、创建第一个工程 1.新建一个文件夹取名如 first_project,也可以建在桌面。 2.在里面新建 CMSIS ,libraries ,Libaries , List(用于链接的) , Obj(工程文件) , output (输出hex文件), User 文件夹; 3. 将固件库里 Librar

5、ies-STM32F10x_StdPeriph_Driver 下的 inc 和src 文件夹复 制到fisrt_project 文件夹下的libraries 里; 将固件库里 Libraries-CMSIS-CM3-CoreSupport文件夹里面的 core_cm3.c 和core_cm3.h 文件复制到我们新建的fisrt_project 文件夹下的CMSIS 里; 将固件库里 Project-STM32F10x_StdPeriph_Template(这个文件家里有KEIL和 IAR建好工程的模板)里的stm32f10x_conf.h , stm32f10x_it.c , stm32f10

6、x_it.h , system_stm32f10x.c 四个文件 复制到我们新建的fisrt_project 文件夹下的User 里; 如下图所示 打开keil uvision4 MDK , 在菜单栏里点击project 选择 new uVision project 保存工程名,选择Obj文件夹, 文件名为first_project ,不用加后缀格式,系统默认。接下来会弹出让你选择器件的窗口,这里我们选择 STmicroelectronics 的 STM32F103C8最后会弹出是否复制启动代码的对话框,选择YES;3、接下来就是管理工程文件了 1、在project窗口右键点击Tagert 1

7、 选择 manage conponents 或者 找到倒数第二个 品字形图标; 2、在Groups 框下面将Groups1 重命名为startup ,同时添加CMSIS, Libraries, User; 选择CMSIS 在Files框下将CMSIS文件夹的core_cm3.c添加进去; 选择Libraries在Files框下将Libraries-src文件下的所以文件都加进去添加进去; 选择User在Files框下将User文件下的所以文件都加进去添加进去; 如下图所示: 点击OK,确定;工程构架如下图所示:4、编写main.c 和文件路径 1、新建main.c 保存到User文件夹里,将其

8、添加到User工程名下。 #include stm32f10x.h int main(void) while(1); 2、在project框下,右键点击Target 1,选择Options for Target target1 在output 选项下,在create HEX file 前打上钩, 点击select Folder for Objects 选择输出文 件夹为 output文件夹; 在Listing选项下,点击select Folder for Listings 选择链接文 件夹为 List文件夹;在C/C+选项下, define里 填入 USE_STDPERIPH_DRIVER,S

9、TM32F10X_MD 中间用英 文的逗号;(一定要记得) Include Paths 里,点击右边的文件路径框 ,选择相应的CMSIS, libraries 里的INC 和SRC 还有 User ; 也可以填绝对路径,比如: C:UsersAdministratorDesktopSTM32编程练习 fisrt_projectCMSIS 这样比较麻烦 好了,这下开始编译链接:0 Error , 0 Warring;First_project 就建好了;万里长征的第一步,总算走出去了。总结:关键是Option for target 的设置,包括output ,listing,和C/C+,尤其是C

10、/C+这个选项里一定要设置对。Define:USE_STDPERIPH_DRIVER,STM32F10X_MD,这是预定义的两个宏定义。 在stm32f10x.h这个头文件里搜索 USE_STDPERIPH_DRIVER 有这么一段 #ifdef USE_STDPERIPH_DRIVER #include stm32f10x_conf.h #endif 据说是定义控制了是否在应用中启用外设驱动。在stm32f10x.h这个头文件里搜索 STM32F10X_MD, /* #define STM32F10X_MD */ /*! STM32F10X_MD: STM32 Medium density

11、devices */ STM32中密度器件#ifdef STM32F10X_MDADC1_2_IRQn = 18, /*! ADC1 and ADC2 global Interrupt */ USB_HP_CAN1_TX_IRQn = 19, /*! USB Device High Priority or CAN1 TX Interrupts */USB_LP_CAN1_RX0_IRQn = 20, /*! USB Device Low Priority or CAN1 RX0 Interrupts */CAN1_RX1_IRQn = 21, /*! CAN1 RX1 Interrupt */

12、CAN1_SCE_IRQn = 22, /*! CAN1 SCE Interrupt */EXTI9_5_IRQn = 23, /*!0;i-) for(j=1000;j0;j-); void GPIO_Config(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed = GPIO_Spe

13、ed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB , &GPIO_InitStructure); int main(void) GPIO_Config(); SystemInit(); while(1) GPIO_SetBits(GPIOB,GPIO_Pin_5 ); /点亮PB.5 delay();GPIO_ResetBits(GPIOB,GPIO_Pin_5 );/熄灭PB.5 delay();GPIO_SetBits(GPIOB,GPIO_Pin_6 );/点亮PB.6 delay();G

14、PIO_ResetBits(GPIOB,GPIO_Pin_6 );/熄灭PB.6 delay(); 2、代码分析:GPIO_InitTypeDef GPIO_InitStructure; 定义一个结构变量GPIO_InitStructure ,结构体类型为GPIO_InitTypeDef ,相当于int A ; GPIO_InitTypeDef =int GPIO_InitStructure=A一样。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); 开启GPIOB的时钟,要使用某个管脚都需要开启该管脚的时钟 GPIO_InitStruc

15、ture.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; 管脚号设置为第五脚和第六脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Speed_10MHz, GPIO_Speed_2MHz, GPIO_Speed_50MH 设置管脚电平翻转的速率,比如不要求快速变化一般10M,做串口的时候设置较高波特率的话就使用50MHZ的。 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 设置输出为推挽输出。 它有8中工作模式,输出只有两种推挽和开漏输出。其它可以参 考相

16、关手册GPIO_Init(GPIOB , &GPIO_InitStructure); 这一句就是将前面四句的设置初始化到GPIOB中; SystemInit(); 将系统时钟设置为72M,不写这句,默认为8M; GPIO_SetBits(GPIOB,GPIO_Pin_5 ); /点亮PB.5 delay();/ 延时GPIO_ResetBits(GPIOB,GPIO_Pin_5 );/熄灭PB.5 delay();GPIO_SetBits(GPIOB,GPIO_Pin_6 );/点亮PB.6 delay();GPIO_ResetBits(GPIOB,GPIO_Pin_6 );/熄灭PB.6 d

17、elay(); 编译链接,然后开始软件仿真3、软件仿真介绍:1、编译连接好后,点击debug 进入调试界面2、 调试窗口如下3、图片上加文字不好弄,大概就是复位、运行、停止、单步运行等我也不太熟悉,反正用到的时候试一试就知道了。4、 选择菜单栏上的 peripherals 按钮,选择general purpose I/O 的GPIOB5、 点击左上角的运行按钮 或者按F5键 就可以看到GPIOB的5,6 在一闪一闪的6、 顺便在看看波形仿真功能 点击下图的波形分析按钮 点击setup 按钮 会弹出一个窗口,在窗口的右上边,有个new的按钮,点击后 分别输入 PORTB.5 和PORTB.6 8

18、、点击运行,将窗口调到合适的位置,最终波形图如下; 写得有些地方可能有错误,明天就要回四川了,有些急 2014年1月12日第四章串口的使用1、为什么要用串口? 自上一篇写的时间是1月20号,今6月7号了,半年没更新了。 这半年发生了什么? 过完年就去找公司实习,在那里自我感觉进步很大。其实在公司大多都是自学,师傅基本不会给你说什么。但这并不能说明你的师傅对你不好,带我的那个师傅只比我高一届,但他的水平比我高的好多届。他也是自学,也没人告诉他该怎么做,因为老板也不太懂。 所以自学能力很重要,当然有人带你的话,这样会更好。 不说这些了,串口在调试的时候作用非常大。也学我们在学51的时候,只是将程序

19、下载到开发板,看看是否能运行起来,通过数码管将结果显示出来,从而就知道程序设计的正确性。以前我也是这样做的,没什么不好。 在公司实习的时候,他们调试都是使用串口打印输出信息,观察程序从上电、初始化、运行数据什么的全部都显示到PC机上。然后再一句一句分析它的打印信息,从而找到出错的源头。这使我对串口的认识有更深了一步,所以我决定在学习STM32的时候,开发流程跟在公司学的方法一样使用串口,观察打印信息。2、STM32跟PC机(也就是电脑)如何连接 我的STM32F103C8T6只是裸板,没有串口芯片,当然用的也是学生机笔记本电脑,同样也没串口。 解决办法1、买一块 MAX3232转接板+一条US

20、B转串口线 +邮费=30块左右 2、只需要买一块PL2303的USB转接板。这样就将第一种的转接板和连接结合到一起了。 不过我用的是第一种,MAX3232+USB的串口线 ,为什么不用方便的2种? max3232对于没有串口的开发板可以充当电平转换芯片,如何开发板有了电平转换芯片,我便使用USB转串口线经行连接,这样便灵活了。 第二种只是用在既没转换芯片也没USB转串口的情况,不过对于最小系统板来说,它既可以下载程序,又可以当做串口来调试。 至于台式机就不需要USB转串口线了,普通串口线即可。 连接示意如下所示: 3、代码分析再写这里之前,应该已经学过模块化编程了,STM32的每个XXX.c

21、和xxx.h 这都是模块化编程。良好的程序,与其好的代码风格有关。你的代码风格跟你接触教你写代码的有很大关系。 以前刚刚学习单片机编程,我还不信,现在我承认,跟教我单片机的老师风格有些像。 这里我做的是一个串口发送数据到PC机的例子:要让STM32能够顺利发出数据,要进行如下配置PA9,PA10管脚要配置,USART也需要配置波特率,数据有几位,停止位,数据流等。USART和uart有什么区别 USART在做串口时,两者并不区别,但是USART有SPI的功能。还有串口通信为什么要配置波特率,停止位,硬件数据留这些,以前我也没想过,现在只觉得协议这个东西,是一个好的标准。建立一个usart_de

22、bug.c的文本,内容如下#includeusart_debug.hvoid GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);/使能UASRT的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/使能GPIOA的时钟,开始的时候,我没用这句话,调了两天,跟源码一句一句比才知道 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFI

23、O, ENABLE); GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; /波特率较高,IO翻转需较高频率GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用推挽输出;我看网上有人说设置成GPIO_Mode_Out_PP普通推挽输出也行,但实践出真知,我试了发送是乱码。;GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin =GPIO_Pi

24、n_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /配置成浮空输入,既然是输入所以就不用配置IO口的频率了GPIO_Init(GPIOA,&GPIO_InitStructure); void USART1_config(void)USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate= 115200; /配置波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; /配置数据位 USART_InitStructure.USART_StopBits = USART_StopBits_1; /停止位USART_InitStructure.USART_Parity= USART_Parity_No ; /奇偶校验位 USART_InitStructure.USART_Hardware

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2