STM32f103C8T6入门学习记录
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
设置输出为推挽输出。它有8中工作模式,输出只有两种推挽和开漏输出。其它可以参
考相关手册
GPIO_Init(GPIOB , &GPIO_InitStructure);
这一句就是将前面四句的设置初始化到GPIOB中;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
保存工程名,选择Obj文件夹,文件名为first_project,不用加后缀格式,系统默认。
接下来会弹出让你选择器件的窗口,这里我们选择STmicroelectronics的STM32F103C8
最后会弹出是否复制启动代码的对话框,选择YES;
3
1、在project窗口右键点击Tagert 1选择manage conponents或者 找到倒数第二个品字形图标;
delay();
GPIO_SetBits(GPIOB,GPIO_Pin_6 );//点亮PB.6
delay();
GPIO_ResetBits(GPIOB,GPIO_Pin_6 );//熄灭PB.6
delay();
}
}
2
GPIO_InitTypeDef GPIO_InitStructure;
定义一个结构变量GPIO_InitStructure,结构体类型为GPIO_InitTypeDef,相当于int
将固件库里Libraries--->CMSIS--->CM3--->CoreSupport文件夹里面的core_cm3.c
和core_cm3.h文件复制到我们新建的fisrt_project文件夹下的CMSIS里;
将固件库里Project---->STM32F10x_StdPeriph_Template(这个文件家里有KEIL和
A;GPIO_InitTypeDef =int GPIO_InitStructure=A一样。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
开启GPIOB的时钟,要使用某个管脚都需要开启该管脚的时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
IAR建好工程的模板)里的stm32f10x_conf.h , stm32f10x_it.c ,
stm32f10x_it.h , system_stm32f10x.c四个文件复制到我们新建的fisrt_project
文件夹下的User里;
如下图所示
打开keil uvision4 MDK ,在菜单栏里点击project选择new uVision project
选择User在Files框下将User文件下的所以文件都加进去添加进去;
如下图所示:
点击OK,确定;
工程构架如下图所示:
4
1、新建main.c保存到User文件夹里,将其添加到User工程名下。
#include "stm32f10x.h"
int main(void)
{
while(1)
{;}
}
2、在project框下,右键点击Target 1,选择Options for Target target1
-----前记
第二章
使用固件库建立一个工程
我打算先从软件编程学起,以前用过KEIL和IAR,IAR我比较熟悉,因为参加电子设计竞赛的时候,就是用它编程MSP430程序的。但我还是选择了KEIL,也许因为资料比较多,或者别的吧,我没分析过KEIL和IAR代码效率如何,因为这不是我现在要考虑的,软件都只是工具而已。
GPIO_Init(GPIOB , &GPIO_InitStructure);
}
int main(vit();
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5 ); //点亮PB.5
delay();
GPIO_ResetBits(GPIOB,GPIO_Pin_5 );//熄灭PB.5
文的逗号;(一定要记得)
Include Paths里,点击右边的文件路径框,选择相应的CMSIS,
libraries里的INC和SRC还有User;
也可以填绝对路径,比如:C:\Users\Administrator\Desktop\STM32编程练习
\fisrt_project\CMSIS这样比较麻烦
管脚号设置为第五脚和第六脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Speed_10MHz,
GPIO_Speed_2MHz,
GPIO_Speed_50MH
设置管脚电平翻转的速率,比如不要求快速变化一般10M,做串口的时候设置较高波特率的话就使用50MHZ的。
8个定时器中timer1和timer8是由apb2输出最高频率为72mhz预分频后再通过一个倍频器得到时钟频率最高为72mhztimer2timer7则是由apb1输出最高频率为36mhz预分频后再通过一个倍频器得到时钟频率最高为36mhz2如何进行程序编写这里我通过定时器来控制一个led亮05s灭05s交替闪烁
现在看到那块板子,总有一种说不出的滋味,要是当时能咬牙切齿努力学习,说不定现在也不会安静地坐在电脑前一字一句敲打这篇激励性文章了。对于STM32我没用任何基础,唯一有的也只是一年前学的那一个星期,不过那已不重要了,我现在仍是一个小白。作为一个初学者,也许是坐井观天,看的是片面的,可能有很多观点是错误的,希望读者朋友能勇于指出来。
EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */
: : :
#endif /* STM32F10X_MD */可能是定义中断向量的值吧
就写到这里,才发现自己做也许一个两个小时就能建好工程,但是要把写出来我却用了一个下午。为了大家跟我都尽快学会STM32,我会努力学习将成果与大家分享;
USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */
CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */
CAN1_SCE_IRQn= 22, /*!< CAN1 SCE Interrupt */
在output选项下,在create HEX file前打上钩,点击select Folder for Objects选择输出文
件夹为output文件夹;
在Listing选项下,点击select Folder for Listings选择链接文
件夹为List文件夹;
在C/C++选项下,define里填入USE_STDPERIPH_DRIVER,STM32F10X_MD中间用英
STM32自学笔记
作者:忙碌的小姚
新浪微博:@忙碌的小姚
新浪博客:
第一章
STM32这块板子是在阿莫上跟一个老师买的,砍了半天100块钱。包括一个Jlink v8仿真器(好像65块左右),和一块STM32系统板。那已是一年前的事了。
那时我刚大三,刚学了半年51,于是想学点更高级的。但我好像属于三分钟热度的这种人,买回来学了一个星期,就学不动了,寄存器操作,固件库的使用根本就没明白是怎么一回事,之后就没有然后了。
遇到多了,经验也就出来,前几天我仿真一个STM32的Systick,仿真结果就不对,程序就是对的,我估计也许是软件本身的问题。
我建议用STM32+JLINK进行仿真,有个硬件平台结果的正确性就有保证。
1
#include "stm32f10x.h"
void delay(void) /* */
{
int i,j;
/* #defineSTM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density
devices */STM32中密度器件
#ifdef STM32F10X_MD
ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX立STM32工程,加上自己的实践。我也把我的初学者步骤贴出来。
1
我在网上下了STM32F103的固件库-----stm32f10x_stdperiph_lib 3.5V版的,里面内容如图所示,据说STM32F103和STM32F101都能用。
2
1.新建一个文件夹取名如first_project,也可以建在桌面。
在stm32f10x.h这个头文件里搜索USE_STDPERIPH_DRIVER有这么一段
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
据说是定义控制了是否在应用中启用外设驱动。
在stm32f10x.h这个头文件里搜索STM32F10X_MD,
for(i=1000;i>0;i--)
for(j=1000;j>0;j--);
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
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
好了,这下开始编译链接:
0 Error , 0 Warring;
First_project就建好了;万里长征的第一步,总算走出去了。
总结:关键是Option for target的设置,包括output,listing,和C/C++,尤其是C/C++这个选项里一定要设置对。
Define:USE_STDPERIPH_DRIVER,STM32F10X_MD,这是预定义的两个宏定义。
2、在Groups框下面将Groups1重命名为startup,同时添加CMSIS, Libraries,User;
选择CMSIS在Files框下将CMSIS文件夹的core_cm3.c添加进去;
选择Libraries在Files框下将Libraries--->src文件下的所以文件都加进去添加进去;
2013年12月25日
第三章
按照上一章建立的第一个工程模板,我们只需要在main函数里加入相关的点亮led灯的代码,并使用keil的软件仿真功能。
软件仿真在一定程度上可以在设计的初期发现程序的错误,减少我们下载到开发板的麻烦。但是纯软件的仿真的正确,也不能保证程序就正确。有时候仿真正确,实物却没这个效果。有时软件仿真结果是错误,你分析你的程序却没错误。
delay();
GPIO_ResetBits(GPIOB,GPIO_Pin_6 );//熄灭PB.6
delay();
编译链接,然后开始软件仿真
3
1、编译连接好后,点击debug进入调试界面
2、调试窗口如下
3、
图片上加文字不好弄,大概就是复位、运行、停止、单步运行等我也不太熟悉,反正用到的时候试一试就知道了。
2.在里面新建CMSIS,libraries ,Libaries , List(用于链接的), Obj(工程文件), output
(输出hex文件), User文件夹;
3.将固件库里Libraries--->STM32F10x_StdPeriph_Driver下的inc和src文件夹复
制到fisrt_project文件夹下的libraries里;
4、选择菜单栏上的peripherals按钮,选择general purpose I/O的GPIOB
5、点击左上角的运行按钮或者按F5键就可以看到GPIOB的5,6在一闪一闪的
6、顺便在看看波形仿真功能
点击下图的波形分析按钮
点击setup按钮会弹出一个窗口,在窗口的右上边,有个new的按钮,点击后
设置输出为推挽输出。它有8中工作模式,输出只有两种推挽和开漏输出。其它可以参
考相关手册
GPIO_Init(GPIOB , &GPIO_InitStructure);
这一句就是将前面四句的设置初始化到GPIOB中;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
保存工程名,选择Obj文件夹,文件名为first_project,不用加后缀格式,系统默认。
接下来会弹出让你选择器件的窗口,这里我们选择STmicroelectronics的STM32F103C8
最后会弹出是否复制启动代码的对话框,选择YES;
3
1、在project窗口右键点击Tagert 1选择manage conponents或者 找到倒数第二个品字形图标;
delay();
GPIO_SetBits(GPIOB,GPIO_Pin_6 );//点亮PB.6
delay();
GPIO_ResetBits(GPIOB,GPIO_Pin_6 );//熄灭PB.6
delay();
}
}
2
GPIO_InitTypeDef GPIO_InitStructure;
定义一个结构变量GPIO_InitStructure,结构体类型为GPIO_InitTypeDef,相当于int
将固件库里Libraries--->CMSIS--->CM3--->CoreSupport文件夹里面的core_cm3.c
和core_cm3.h文件复制到我们新建的fisrt_project文件夹下的CMSIS里;
将固件库里Project---->STM32F10x_StdPeriph_Template(这个文件家里有KEIL和
A;GPIO_InitTypeDef =int GPIO_InitStructure=A一样。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
开启GPIOB的时钟,要使用某个管脚都需要开启该管脚的时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
IAR建好工程的模板)里的stm32f10x_conf.h , stm32f10x_it.c ,
stm32f10x_it.h , system_stm32f10x.c四个文件复制到我们新建的fisrt_project
文件夹下的User里;
如下图所示
打开keil uvision4 MDK ,在菜单栏里点击project选择new uVision project
选择User在Files框下将User文件下的所以文件都加进去添加进去;
如下图所示:
点击OK,确定;
工程构架如下图所示:
4
1、新建main.c保存到User文件夹里,将其添加到User工程名下。
#include "stm32f10x.h"
int main(void)
{
while(1)
{;}
}
2、在project框下,右键点击Target 1,选择Options for Target target1
-----前记
第二章
使用固件库建立一个工程
我打算先从软件编程学起,以前用过KEIL和IAR,IAR我比较熟悉,因为参加电子设计竞赛的时候,就是用它编程MSP430程序的。但我还是选择了KEIL,也许因为资料比较多,或者别的吧,我没分析过KEIL和IAR代码效率如何,因为这不是我现在要考虑的,软件都只是工具而已。
GPIO_Init(GPIOB , &GPIO_InitStructure);
}
int main(vit();
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5 ); //点亮PB.5
delay();
GPIO_ResetBits(GPIOB,GPIO_Pin_5 );//熄灭PB.5
文的逗号;(一定要记得)
Include Paths里,点击右边的文件路径框,选择相应的CMSIS,
libraries里的INC和SRC还有User;
也可以填绝对路径,比如:C:\Users\Administrator\Desktop\STM32编程练习
\fisrt_project\CMSIS这样比较麻烦
管脚号设置为第五脚和第六脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Speed_10MHz,
GPIO_Speed_2MHz,
GPIO_Speed_50MH
设置管脚电平翻转的速率,比如不要求快速变化一般10M,做串口的时候设置较高波特率的话就使用50MHZ的。
8个定时器中timer1和timer8是由apb2输出最高频率为72mhz预分频后再通过一个倍频器得到时钟频率最高为72mhztimer2timer7则是由apb1输出最高频率为36mhz预分频后再通过一个倍频器得到时钟频率最高为36mhz2如何进行程序编写这里我通过定时器来控制一个led亮05s灭05s交替闪烁
现在看到那块板子,总有一种说不出的滋味,要是当时能咬牙切齿努力学习,说不定现在也不会安静地坐在电脑前一字一句敲打这篇激励性文章了。对于STM32我没用任何基础,唯一有的也只是一年前学的那一个星期,不过那已不重要了,我现在仍是一个小白。作为一个初学者,也许是坐井观天,看的是片面的,可能有很多观点是错误的,希望读者朋友能勇于指出来。
EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */
: : :
#endif /* STM32F10X_MD */可能是定义中断向量的值吧
就写到这里,才发现自己做也许一个两个小时就能建好工程,但是要把写出来我却用了一个下午。为了大家跟我都尽快学会STM32,我会努力学习将成果与大家分享;
USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */
CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */
CAN1_SCE_IRQn= 22, /*!< CAN1 SCE Interrupt */
在output选项下,在create HEX file前打上钩,点击select Folder for Objects选择输出文
件夹为output文件夹;
在Listing选项下,点击select Folder for Listings选择链接文
件夹为List文件夹;
在C/C++选项下,define里填入USE_STDPERIPH_DRIVER,STM32F10X_MD中间用英
STM32自学笔记
作者:忙碌的小姚
新浪微博:@忙碌的小姚
新浪博客:
第一章
STM32这块板子是在阿莫上跟一个老师买的,砍了半天100块钱。包括一个Jlink v8仿真器(好像65块左右),和一块STM32系统板。那已是一年前的事了。
那时我刚大三,刚学了半年51,于是想学点更高级的。但我好像属于三分钟热度的这种人,买回来学了一个星期,就学不动了,寄存器操作,固件库的使用根本就没明白是怎么一回事,之后就没有然后了。
遇到多了,经验也就出来,前几天我仿真一个STM32的Systick,仿真结果就不对,程序就是对的,我估计也许是软件本身的问题。
我建议用STM32+JLINK进行仿真,有个硬件平台结果的正确性就有保证。
1
#include "stm32f10x.h"
void delay(void) /* */
{
int i,j;
/* #defineSTM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density
devices */STM32中密度器件
#ifdef STM32F10X_MD
ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX立STM32工程,加上自己的实践。我也把我的初学者步骤贴出来。
1
我在网上下了STM32F103的固件库-----stm32f10x_stdperiph_lib 3.5V版的,里面内容如图所示,据说STM32F103和STM32F101都能用。
2
1.新建一个文件夹取名如first_project,也可以建在桌面。
在stm32f10x.h这个头文件里搜索USE_STDPERIPH_DRIVER有这么一段
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
据说是定义控制了是否在应用中启用外设驱动。
在stm32f10x.h这个头文件里搜索STM32F10X_MD,
for(i=1000;i>0;i--)
for(j=1000;j>0;j--);
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
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
好了,这下开始编译链接:
0 Error , 0 Warring;
First_project就建好了;万里长征的第一步,总算走出去了。
总结:关键是Option for target的设置,包括output,listing,和C/C++,尤其是C/C++这个选项里一定要设置对。
Define:USE_STDPERIPH_DRIVER,STM32F10X_MD,这是预定义的两个宏定义。
2、在Groups框下面将Groups1重命名为startup,同时添加CMSIS, Libraries,User;
选择CMSIS在Files框下将CMSIS文件夹的core_cm3.c添加进去;
选择Libraries在Files框下将Libraries--->src文件下的所以文件都加进去添加进去;
2013年12月25日
第三章
按照上一章建立的第一个工程模板,我们只需要在main函数里加入相关的点亮led灯的代码,并使用keil的软件仿真功能。
软件仿真在一定程度上可以在设计的初期发现程序的错误,减少我们下载到开发板的麻烦。但是纯软件的仿真的正确,也不能保证程序就正确。有时候仿真正确,实物却没这个效果。有时软件仿真结果是错误,你分析你的程序却没错误。
delay();
GPIO_ResetBits(GPIOB,GPIO_Pin_6 );//熄灭PB.6
delay();
编译链接,然后开始软件仿真
3
1、编译连接好后,点击debug进入调试界面
2、调试窗口如下
3、
图片上加文字不好弄,大概就是复位、运行、停止、单步运行等我也不太熟悉,反正用到的时候试一试就知道了。
2.在里面新建CMSIS,libraries ,Libaries , List(用于链接的), Obj(工程文件), output
(输出hex文件), User文件夹;
3.将固件库里Libraries--->STM32F10x_StdPeriph_Driver下的inc和src文件夹复
制到fisrt_project文件夹下的libraries里;
4、选择菜单栏上的peripherals按钮,选择general purpose I/O的GPIOB
5、点击左上角的运行按钮或者按F5键就可以看到GPIOB的5,6在一闪一闪的
6、顺便在看看波形仿真功能
点击下图的波形分析按钮
点击setup按钮会弹出一个窗口,在窗口的右上边,有个new的按钮,点击后