教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

STM32f103C8T6入门学习记录(3)

来源:网络收集 时间:2026-07-17
导读: 在output 选项下,在create HEX file 前打上钩, 点击select Folder for Objects 选择输出文 件夹为 output文件夹; 在Listing选项下,点击select Folder for Listings 选择链接文 件夹为 List文件夹; 在C/C++选项

在output 选项下,在create HEX file 前打上钩, 点击select Folder for Objects 选择输出文 件夹为 output文件夹;

在Listing选项下,点击select Folder for Listings 选择链接文 件夹为 List文件夹;

在C/C++选项下, define里 填入 USE_STDPERIPH_DRIVER,STM32F10X_MD 中间用英 文的逗号;(一定要记得)

Include Paths 里,点击右边的文件路径框 ,选择相应的CMSIS, libraries 里的INC 和SRC 还有 User ;

也可以填绝对路径,比如: C:\\Users\\Administrator\\Desktop\\STM32编程练习 \\fisrt_project\\CMSIS 这样比较麻烦

好了,这下开始编译链接:

0 Error , 0 Warring;

First_project 就建好了;万里长征的第一步,总算走出去了。

总结:关键是Option for target 的设置,包括output ,listing,和C/C++,尤其是C/C++这个选项里一定要设置对。

Define:USE_STDPERIPH_DRIVER,STM32F10X_MD,这是预定义的两个宏定义。 在stm32f10x.h这个头文件里搜索 USE_STDPERIPH_DRIVER 有这么一段 #ifdef USE_STDPERIPH_DRIVER #include \ #endif

据说是定义控制了是否在应用中启用外设驱动。

在stm32f10x.h这个头文件里搜索 STM32F10X_MD,

/* #define STM32F10X_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 Interrupts */ 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 */ EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */

: : :

#endif /* STM32F10X_MD */ 可能是定义中断向量的值吧

就写到这里,才发现自己做也许一个两个小时就能建好工程,但是要把写出来我却用了一个下午。为了大家跟我都尽快学会STM32,我会努力学习将成果与大家分享;

2013年12月25日

第三章

STM32点亮第一个LED 使用keil for ARM MDK 软件仿真

按照上一章建立的第一个工程模板,我们只需要在main函数里加入相关的点亮led灯的代码,并使用keil的软件仿真功能。

软件仿真在一定程度上可以在设计的初期发现程序的错误,减少我们下载到开发板的麻烦。但是纯软件的仿真的正确,也不能保证程序就正确。有时候仿真正确,实物却没这个效果。有时软件仿真结果是错误,你分析你的程序却没错误。

遇到多了,经验也就出来,前几天我仿真一个STM32的Systick ,仿真结果就不对,程序就是对的,我估计也许是软件本身的问题。

我建议用STM32+JLINK 进行仿真,有个硬件平台结果的正确性就有保证。

1、Main.c 函数代码:

#include \void delay(void) /* */ {

int i,j; 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); 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;

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(); GPIO_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_InitStructure.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中工作模式,输出只有两种推挽和开漏输出。其它可以参

…… 此处隐藏:653字,全部文档内容请下载后查看。喜欢就下载吧 ……
STM32f103C8T6入门学习记录(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/447809.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)