请大神指教关于文件stm32指针式时钟怎么在stm32程序中使用

我觉得ARM7会被STM32取代,STM32偏向;追问stm32有什么好书籍吗?发现资料挺少的;回答《ARM微控制器应用设计与实践》;个人觉得还是先学习ARM7,等学会了之后你自然也;两者肯定是有区别的,但是这是基本的学习过程;coretex-m3是现在企业用的最多的cpu,;stm32是armv7内核arm7是armv4内;进阶学习,是选择STM32好还是
我觉得ARM7会被STM32取代,STM32偏向不带系统的工业控制,外围设备甚至比ARM7、ARM9更丰富,而ARM7带不了大系统,想带系统至少也要从ARM9开始。要么直接上ARM9学学系统,要么就顺便学学STM32裸奔,ARM7不上不下没必要去学。
追问stm32有什么好书籍吗?发现资料挺少的
回答《ARM微控制器应用设计与实践》
个人觉得还是先学习ARM7 ,等学会了之后你自然也就会动的STM32!
两者肯定是有区别的,但是这是基本的学习过程。我也是这样走过来的
coretex-m3 是现在企业用的最多的cpu ,是arm7的升级版,我觉得arm7
---- 微内核 ------arm9 -----Linux 是做好的学习路径
stm32是armv7内核 arm7是armv4内核,构架不同。
进阶学习,是选择STM32好还是ARM7,还是ARM9?本人会51,而且做过相应的开发项目,最近想提升自己的能力,但是不知道是选择哪一个为好,是STM32、arm7,arm9,msp430,dsp???没有头绪,请大神指点
我建议您选择转向STM32,从开发角度来讲,STM32比51的编程更加简单,厂家的工程代码中提供了很多的库函数来操作GPIO,UART,SPI,AD,TIMER等资源,不需要像51
去记忆各个特殊寄存器的属性和用途。
STM32是现在市场上性价比非常高的一款ARM产品,使用的是Cortex-M3内核,在同等价位下,其内部资源比51要丰富更多。STM32同系列的产品,在软件和硬件上兼容性很好,尤其是从PIN脚少的芯片更换为PIN脚多的芯片的时候,代码都无需修改就能直接应用。 基于价格和使用性能的因素,STM32在很多产品中得到广泛应用,市场供货基本没有问题,现货相当充足,目前我们公司95%的产品都是基于STM32的。
如果你想从事嵌入式应用程序的开发,直接上ARM9开发,学习LINUX或安卓去。
如果你想从事嵌入式驱动程序的开发,或者想成为一名博学多才的主管,又或者未来你想成为一名架构师,你需要单片机给你打下硬件基础,那你可以以“低端单片机-高端单片机-低端ARM-高端ARM”来学。
我现在就是工作中用STM32,晚上回去自学ARM9。
楼主的进阶是指从51到ARM还是指已经基本掌握32位单片机?
如果有单片机基础,但是没有玩过ARM,建议学习STM32,甚至说没有玩过单片机想入门的也可以选择STM32,因为STM32例程丰富,资源比较多,市面上成熟的开发板也比较多,而且基本价格都在300以内。
而如果楼主已经对32位单片机比较了解,想学习嵌入式系统Linux/WIN CE等,可以考虑6410,或者楼主预算非常充足,可以考虑Cortex-A8/A9的开发板。我个人是比较熟悉STM32,没有玩过ARM9,稍稍玩过ARM7,现在是在学飞凌的6410了。
追问我玩的是51系列的单片机,感觉想提升一下,玩32位的,stm32貌似跑不起LINUX系统和WINCE系统,所以就是比较纠结选择哪一个开始作为学习
回答其实从51跨到LINUX还是有一定难度的,楼主可以考虑玩ARM9。我个人的学习轨迹是AVR-STM32(UCOSII)- 6410(LINUX)循序渐进,先易后难
追问谢谢你,我现在正式在自学ARM9和LINUX系统中
两者肯定是有区别的,但是这是基本的学习过程。我也是这样走过来的
coretex-m3 是现在企业用的最多的cpu ,是arm7的升级版,我觉得arm7
---- 微内核 ------arm9 -----Linux 是做好的学习路径
stm32使用的是ARM公司开发的Cortex-M3内核,就是ARM芯片的一种,使用的是最新的ARM V7内核架构,Cortex还有A、R两个系列
专家的建议,初学者学三星的S3C44B0很好,虽然这块芯片被业界用烂了,不是处理器越高的就一定越好,学ARM9,要学Linux,精通Linux内核,这比精通ucosII难度大多了,专家建议先学ucosII,一个非常好的小的嵌入式实时操作系统。
相对来说STM32应用更广泛一些,既适合ARM也适合X86。
嗯,之前我也纠结过;后来我退回去把51学的烂熟;然后就上了ARM9linux;一路走过来累的半死;就是因为一下上的太多先学完了RAM9的基础,然后又上linux系统移植和内核实在是差的太多吃不透;偶然的一次机会接触了ARM7和stm32;觉得STM32是我用过最好用的ARM芯片;但是缺点也有不能上大系统(也有上大系统的,但是去研究不又从蹈覆辙了吗),主要用于工控。
所以建议先用STM32 容易理解些;向上大的系统的有操作系统的经验,现在工作了才开始研究ucos,先从简单的来,linux可以学对理解系统有帮助不能馅的太深,那是一个深不可测的黑洞。只要好好学都能学好的,希望对你有帮助。
学过简单的 STC单片机 CPLD&FPGA
是不是ARM越高端的越好啊,功能越全?
是不是 ARM 7,9 和Cotex 上的内容,ARM 11都能干?
STM好像很便宜,只是ARM11很贵啊。。
它们之间具体有哪些区别?
不要从硬件角度说,说说编程上的区别和可以实现的功能上说。
ARM 的内存很大 STM 32 的很小,STM32上面是不是不能装系统?
装不上系统,差别大不大?
ARM只是一个系列化的核,不同的厂商在它的核周边加上不同的外设而已.
STM系列ARM定位在控制器上,也就是说,它的定位相当于高速的8051(只是说可以这么理解,实际比8051要好用的多,不仅仅是速度).
从相当一部分来讲,CORTEX M3都能胜任并且强过ARM7,当然不是全部.
STM32也可以跑操作系统,比如UCOS一类的.
象ARM9,ARM11已经不再是当做单片机了(当然,做单片机也是可以的),通常跑个LINUX,WINCE等等操作系统.
装上操作系统与&裸奔&的最大区别就是编程的时候不用太计较硬件操作,移植好OS以后编程基本上就是使用OS的API而不是象8051那样对硬件直接操作了.
是不是ARM越高端的越好啊,功能越全?
A:可以这么说,如果不计算成本的话. 是不是 ARM 7,9 和Cotex 上的内容,ARM 11都能干? A:同上
STM好像很便宜,只是ARM11很贵啊。。
A: 是的,STM最便宜10块左右, ARM11核的芯片都在60以上.而且ARM11还要配DDR RAM, FLASHROM,所以不能只看CPU价格. 它们之间具体有哪些区别?
A:看上面那一段废话.
提问者评价
谢啦,第第三个说的也不错,ARM11 过时了.....
肯定是STM32,基于Cortex-M3架构的STM32本来就是代替上一代的ARM7的
以前玩过单片机,做过些小项目,最近想玩玩ARM,不知Cortex-M3的STM32与ARM7学哪个好,同学有玩STM32的,但感觉和单片机差不多,不过功能更强大些,不能上系统。不知工作中哪种用的比较多,高手指教下,谢了!
我也是从51到ARM7,ARM9,再到ARM-CORTEX的,
你可以先从ARM CORTEX-M3下手。
CORTEX是新鲜产物,才推出不到3年,各大厂商ST.NXP,TI.ATMEL都有推出它的产品,ARM7已经上市久了,大家都玩过的。而cortex是ARM公司主推的新架构产品,前景很看好。
CORTEX很容易上手,它和51是同样的哈佛架构,不象ARM7和ARM9是冯架构。 可以用KEIL编译器,又让我找回了当年玩51的感觉。
中文资料也很多,厂商的封装库也很齐全.特别适合从51转过去的初学者.
要是有不懂的地方可以找我
提问者评价
谢谢哦啊,呵呵
不用去学AVR的,除非非常有必要。
51,AVR,ARMv7(STM32),ARM9之间没有必然的联系,不用一步一步去学。
51属于简单的单片机,用来了解单片机工作原理什么的,是不错的选择。
学习怎么操作单片机寄存器什么的,还有养成良好的编程习惯。
AVR使用也不少,你要精通51,将来工作中要用到AVR的话,也就花几天熟悉一下就可以了。
STM32跟ARM7不是一回事,STM32的核是CORTEX M3,内核版本是ARMv7不是ARM7。 STM32功能,速度,位宽跟51都不一样,强大很多。
STM32可以使用UCOS,一般没必要,裸奔挺好,你要学习UCOS的话另说。
ARM9已是昨日黄花,工业上应用还好,消费级的都是CORTEX A8/A9了。
至于ARM9还是CORTEX A8,本质上相差不大,都是利用别人做好的WINCE,LINUX/ANDROD操作系统上进行开发,NB点的做做移植什么的。
想必你应该明白,你说的四种处理芯片互相之间没有多少的联系,不要认为那是进阶一步一步的走。
追问主要想参加飞思卡尔小车竞赛,想51熟了,再学一个强大点儿的,那stm32应该就能满足要求的吧?还有推荐一款开发板呗,谢谢!!!
回答飞思卡尔的小车竞赛应该有他们的赞助吧?
这个东西没玩过,如果只是寻线够了,要是图像识别的话肯定不够。
开发板建议用STM32 DISCOVERY,理由是这个开发板自带JTAG调试工具,USB供电不需要外加电源,价格便宜(100块以下)。缺点是板上集成度很低。
如果只是为了小车,建议你上淘宝买专用成品电路板,自己做比买的要高的多。
我做了半年51,还有快半年的STM8+STM32。
我给你的建议是先把51所有模块学精,然后再学STM32或者ARM9,AVR真的是没必要学了,性价比远没有STM32来的高,甚至STM8都更便宜更好用。
STM32多用于工业控制,STM32与ARM9的区别就是STM32的模块数(比如串口数量)可能会更多,唯一不好的是不适合加载操作系统,可以说ARM9裸奔就是STM32。
你如果有充足的时间,那你可以学完51直接ARM9,ARM9的资料很多,你的思想要从寄存器操作转向库的操作,难点就是库+操作系统,这时你学的会非常痛苦。据说自学时间在半年。
如果你即将工作了,时间很有限,你可以学好51后花一个月时间学STM32,先找一份单片机的工作,熟悉库的操作,用业余时间学学操作系统,等学ARM9学的差不多时你再换一份嵌入式的工作。
其实,多学几块芯片是有用的,这些知识都是触类旁通的,而且这样对你视野有帮助。STM8
与STM32类似,但是资料很少,并且软件没有KEIL好用,而且下载器又贵,有兴趣可以去了解下。
我从事单片机行业快1年,觉得单片机很有限,在考虑做满一年去找一份嵌入式的工作,所以现在买了块MINI2440,用业余时间看看。
追问主要想参加飞思卡尔小车竞赛,想51熟了,再学一个强大点儿的,那stm32应该就能满足要求的吧?还有推荐一款开发板呗,谢谢!!!
回答可以满足啊,你上淘宝搜下销量排行就知道买哪块了。
追问野火的怎么样?
回答应该是不错的,我只用过杂牌的最小系统板,因为便宜公司就用这个。不要只认牌子,杂牌一样可以很好用,主要看模块全不全,以及资料丰不丰富,资料好能让你事半功倍。 追问谢谢你啊,决定等51差不多了,入手野火的stm32,不过楼上回答的也挺好的,所以分给她了,别在意,谢谢了
不错,我现在也在学习STM32,买了个开发板一年多了,没怎么玩过 UCOS也没跑过
我之前从51转到AVR的时候,自己买了二个ATMEGA16 一个13块钱自己焊了个学习板,主要是你不怕麻烦。
追问51转AVR,不是买个芯片还有那个转换线就行了吗?ATMEGA16是什么?刚入门51不太懂
回答ATMEGA16 就是AVR中一种
不是买个芯片还有那个转换线就行,它也有最小系统,跟51一样你用到什么硬件要自己搭 51跟AVR的接口不一样,如果你有一个51学习板,需要一个AVR转51的转接板才可以做实验
追问外围硬件准备就用51的外围硬件了,转接板应该逃班上有卖的吧?你是自己焊接的吗?这个应该比较难做吧
回答没什么难的,我09年也是自学的51 后来自学AVR 以及现在的STM32
其实硬件电路都比较简单,因为都是数字电路,也不是高频,网上都有很多现成的
如果自己有条件可以自己焊接一个学习板或者把所有模块加上去自己画个PCB
楼上说的没错,单片机的特点就是互相之间相互比较独立,你要是没有用过单片机的话,可以先从51入手熟悉,然后根据具体的工程需求选择适合的单片机方案。裸奔的话CORTEX M3内核就很强大了,如果上操作系统,那么编程和选什么单片机就不重要了,主要去学几个主流操作系统编程。
arm7是arm公司推出的以V4指令集设计出来的arm核,基于arm7可以生产出很多CPU芯片,其代表的芯片有s3c44b0等;
arm9是arm公司推出的以V5指令集设计出来的arm核,基于arm9其它公司推出了自己的CPU芯片,如三星推出了S3C2440。还有TI啊,ATMEL啊,高通啊都基于arm9推出了自己的CPU芯片。
cortex是arm公司推出的以V7指令集设计出来的一系列arm核,其中包括Cortex-M1,Cortex-M0,Cortex-M4,包括你说的Cortex-M3,还有高端的,Cortex-A8,Cortx-A9,Cortex-A15等;
三亿文库包含各类专业文献、幼儿教育、小学教育、外语学习资料、各类资格考试、stm32与arm7比较(经典)34等内容。 
 发现小型的 ARM7 在外设够用的情况下其实很不错,...STM32 开发板.pdf――各种开发板介绍和功能比较。 ...(因此对于经典的 51 单片机的 P0 口而言,要想做...  STM32启动过程分析_IT/计算机_专业资料。STM32 启动 ARM7 和 ARM9 启动时从绝对地址 0X 开始执行复位中断程序,即 固定了复位后的起始地址,但中断向量表...  STM32 入门要比 ARM7 简单很多,只是比 8 位机复杂一点,时钟配 置多了几项...stm32 的开发,建议不要买太复杂的学习板,这只会让你丧失 信息,循序渐进比较...  STM32介绍以及与通常ARM的区别_信息与通信_工程科技_专业资料。ARM是英国的芯片设计公司,其最成功的莫过于32位嵌入式CPU核---ARM系列,最常用的是ARM7和ARM9,AR...  MDK (原文件名:ST Link2.jpg) 引用图片 7、wiggler + H-JTAG - (/) 在 ARM7 上支持 IAR for ARM、MDK,在 STM32 上未测试,...  发现小型的 ARM7 在外设够用的情况下其实很不 错,...大致的比较,这个时候发现了 CortexM3 的 STM32,比...(因此对于经典的 51 单片机的 P0 口而言,要想做...  想要知道各个引脚的相应功能查 STM32F103RCT6 数据手册 2. 想要查找各种寄存器...通常说的 arm7,arm9 和 arm11 就属于此架构(现在的市 场份额比较小) 。...  3.硬件电路设计 3.1 系统框图该数字频率计电路系统包括:比较整形电路,CPU 电路,...在本系统中的 CPU 采用意法公司 STM32,该芯片具有 ARM7 内核,其 最高频率...  对比 ARM7/ARM9 内核,Cortex-M3 内核则是固定了中断向量表的位置而起始地址是可变化的。举例说明如下: 在 startup_stm32f10x_hd.s 启动文件中,有如下一段...请大神指教关于文件指针怎么在stm32程序中使用 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
Hot [直播]
请大神指教关于文件指针怎么在stm32程序中使用
10:14:01  
你们好,请问怎么在stm32程序中使用文件指针,就是用文件指针存储数据后读出来,谢谢大家,挺急的,麻烦了。
11:39:16  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
使用系统malloc函数,先调用_init_alloc(unsigned /*base*/, unsigned /*top*/)显式初始化堆空间看看MDK的help文件就知道
12:11:47  
要在存储后读出来,写数据前保存当前指针,写完数据后将文件写出到存储介质(即清空文件缓冲区),然后用先头保存的指针重置文件位置,就可以读出之前写到文件中的内容了,如果不写出到文件,读出的内容就可能是缓冲区的内容,而不是存储介质上实际文件的内容
09:24:29  
要在存储后读出来,写数据前保存当前指针,写完数据后将文件写出到存储介质(即清空文件缓冲区),然后用先 ...
你好,我们目前的情况就是在程序的文件夹里建立了一个/*.txt*/的文件,在里面写了内容,然后在程序里面定义了文件指针,用fopen()函数来打开内容,但是好像不能打开,就是用串口不能读出里面的内容,甚至我们故意把绝对路径改错,就是在绝对路径里加入的是不存在的文件,但是还是输出同样的内容,请问这是什么情况?麻烦你了
09:25:16  
使用系统malloc函数,先调用_init_alloc(unsigned /*base*/, unsigned /*top*/)显式初始化堆空间看看MDK的h ...
先在还没解决,我先看看,谢谢了啊
10:23:23  
你是不是想用开发板通过串口读PC上的文件?
如果不是,请描述你具体的硬件,文件在哪儿,程序在哪儿运行,软件、硬件平台是什么
15:42:03  
你是不是想用开发板通过串口读PC上的文件?
如果不是,请描述你具体的硬件,文件在哪儿,程序在哪儿运行, ...
你好,我们目前想做的就是将摄像头接受到的数据实时存储在一个文件里,然后再定义一个文件指针读取文档里面的数据
15:45:34  
你是不是想用开发板通过串口读PC上的文件?
如果不是,请描述你具体的硬件,文件在哪儿,程序在哪儿运行, ...
//RCC_Configration();
//NVIC_Configration();
//GPIO_Configration();
//USART_Configration();
if((fp=fopen(&D:\a.txt&,&r&))==NULL)&&//这里已经加了绝对路径了
printf(&can not&);
fgets(stc,3,fp);
for(i=0;i&3;i++)& &//文档里面是‘abc’三个字符
printf(&\r\n this is '%c'. \r\n&,fp);
我们现在试验的就是将txt文档里面的‘abc’读出后通过串口打印出来
16:21:11  
文件是在PC机上还是开发板上?看你的路径‘D:\a.txt'应该是在PC机上,而你的程序是在ARM开发板上运行,这样是不行的,这就相当于你随便在你的电脑上运行一个程序,就想访问另外一台电脑上的文件;
ARM系统上要访问文件,必须是他自带的文件系统,而不是其他机器上的文件;
11:59:23  
你这里的fp不是字符,不应在printf以字符输出;
fp是指向 FILE 结构的指针,FILE结构用来记录具体打开的文件的一些参数,不是文件的内容
15:51:48  
文件是在PC机上还是开发板上?看你的路径‘D:\a.txt'应该是在PC机上,而你的程序是在ARM开发板上运行,这样 ...
嗯嗯,了解了,我会继续了解这个得,谢谢你这么耐心的解答啊
10个问题&&&&&&&&4715个浏览
21个问题&&&&&&&&20723个浏览
32个问题&&&&&&&&7462个浏览
通过本期深入浅出的直播,你将会得到:
如何正确认知常见单片机的发展,分类与选型?
典型方案实例:常用单片机的应用与开发
玩单片机到身价千万老总,光环背后是怎样的生活和经历?
如何培养“老总”需要培养的那些能力?
如何养成成为“老总”需要养成的成功习惯?
即日起至6月15日,参与英蓓特NXP产品知识小测验,即有机会赢取最新系列开发板。特别奖SBC-EC9100开发板1套,幸运奖FRDM系列最新开发板(型号随机,共10套)。快来参加吧! >> 立即参加
Powered by查看: 34634|回复: 7
在 Keil uVision4 MDK下配置开发STM32F103Z完整教程
环境搭建:
1、安装 Keil uVision4 MDK 略2、安装 J-Link 安装 Setup_JLinkARM_V4501.exe 驱动时,会弹出【SEGGER J-Link DLL Updater V4.501 】对话框,不要选择 Keil 直接点击OK即可,因为Keil对支持M3内核SW接口采用了JL2CM3.dll 这个文件,该文件的版本号是和该目录下Jlink驱动版本号配套的,不要擅自改变他们,否则不能使用。 建立工程:1、在桌面上建立一个文件夹【MyStm32】文件夹2、在【MyStm32】文件夹下建立【USER】、【FWlib】、【CMSIS】、【Output】、【Listing】文件夹。& & & & 【USER】:存放用户自定义的应用程序& & & & 【FWlib】:存放库文件& & & & 【CMSIS】:存放M3系列单片机通用的文件& & & & 【Output】:存放编译器编译后输出的文件& & & & 【Listing】:编译器编译过程中产生的文件3、将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 的【inc】跟【src】& & & & 这两个文件夹拷贝到【FWlib】。& & & & 【inc】、【src】片上外设驱动的源文件和头文件。4、\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下的& & & & main.c、stm32f10x_conf.h、stm32f10x_it.h、stm32f10x_it.c 、system_stm32f10x.c 拷贝到【USER】 & & & & stm32f10x_conf.h:配置文件& & & & stm32f10x_it.h、stm32f10x_it.c:中断函数文件。& & & & system_stm32f10x.c:ARM公司提供的符合CMSIS标准的库文件5、STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup的& & & & 【arm】文件夹的拷贝到 MyStm32\CMSIS\startup。& & & & 这些都是用汇编编写的驱动文件,STM32F103ZE芯片是大容量Flash,应选择startup_stm32f10x_hd.s6、STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 的 core_cm3.c 和 core_cm3.h & & & & 也拷贝到【CMSIS】文件夹下。7、STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 的 & & & & stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h 拷贝到【CMSIS】文件夹下。 8、用keil MDK 建立工程文件到【USER】文件夹下,工程名为【STM32-DEMO】& & & & 在该工程下建立四个组:& & & & 【STARTCODE】:存放启动代码 添加 startup_stm32f10x_hd.s 文件& & & & 【USER】:存放用户自定义的应用程序 添加main.c、stm32f10x_it.c& & & & 【FWlib】:存放库文件 按需添加src里面的驱动文件& & & & 【CMSIS】:存放M3系列单片机通用的文件 添加core_cm3.c、system_stm32f10x.c
添加 USE_STDPERIPH_DRIVER 是为了屏蔽编译器的默认搜索路径,转而使用我们添加到工程中的 ST 的库,添加 STM32F10X_HD 是因为我们用的芯片是大容量的,添加了STM32F10X_HD 这个宏之后,库文件里面为大容量定义的寄存器我们就可以用了。芯片是小或中容量的时候宏要换成STM32F10X_LD或者STM32F10X_MD。其实不管是什么容量的,
& & 我们只要添加上 STM32F10X_HD 这个宏即可,当你用小或者中容量的芯片时,那些为大容量定义的寄存器我不去访问就是了,反正也访问不了。
流水灯实验:
只用到 配置GPIO功能和配置时钟功能,所以在 stm32f10x_conf.h
只需要包含两个头文件即可:
#include &stm32f10x_gpio.h&
#include &stm32f10x_rcc.h&
流水灯流程:
& & & & 1、开启指定GPIO的外设时钟 -& RCC_APB2PeriphClockCmd()
& & & & 2、设置 GPIO_InitTypeDef 指定引脚、工作状态、输出频率
& & & & 3、根据 调用GPIO_Init() 初始化IO -& GPIO_Init()
& & & & 4、设置IO输出高低电平,实现控制LED灯的亮灭。
#include &led.h&& & & &
void LED_GPIO_Config(void)
& & & & // 定义一个 GPIO_InitTypeDef 类型的结构体
& & & & GPIO_InitTypeDef GPIO_InitS
& & & & // 开启 GPIOC 的外设时钟
& & & & RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
& & & & // 选择要控制的 GPIOC 引脚
& & & & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
& & & & // 设置引脚模式为通用推挽输出
& & & & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
& & & & // 设置引脚速率为 50Mhz
& & & & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
& & & & // 调用库函数,初始化GPIOC
& & & & GPIO_Init(GPIOC, &GPIO_InitStructure);
& & & & // 设置GPIOC3、GPIOC4、GPIOC5 为高电平
& & & & GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);
#ifndef __LED_H
#define __LED_H
#include &stm32f10x.h&
#include &stm32f10x_rcc.h&
#define ON& & & & 0
#define OFF& & & & 1
//带参宏,可以向联函数一样使用
#define& & & & LED1(a) if(a) \
& & & & & & & & & & & & & & & & & & & & GPIO_SetBits(GPIOC, GPIO_Pin_3);\
& & & & & & & & & & & & & & & & else&&\
& & & & & & & & & & & & & & & & & & & & GPIO_ResetBits(GPIOC, GPIO_Pin_3)
#define& & & & LED2(a) if(a) \
& & & & & & & & & & & & & & & & & & & & GPIO_SetBits(GPIOC, GPIO_Pin_4);\
& & & & & & & & & & & & & & & & else&&\
& & & & & & & & & & & & & & & & & & & & GPIO_ResetBits(GPIOC, GPIO_Pin_4)
#define& & & & LED3(a) if(a) \
& & & & & & & & & & & & & & & & & & & & GPIO_SetBits(GPIOC, GPIO_Pin_5);\
& & & & & & & & & & & & & & & & else&&\
& & & & & & & & & & & & & & & & & & & & GPIO_ResetBits(GPIOC, GPIO_Pin_5)
void LED_GPIO_Config(void);
#include &stm32f10x.h&
#include &led.c&
void Delay(__IO u32 nCount)
& & & & for(; nCount !=0; nCount--);& & & &
int main(void)
& & & & LED_GPIO_Config();
& & & & while (1)
& & & & & & & & LED1(ON);
& & & && & & & & & Delay(0x0FFFEF);
& & & & & & & & LED1(OFF);
& & & && & & & & & Delay(0x0FFFEF);
-----------------------------------------------------------------------
1.&&typedef enum&&
3.& & GPIO_Speed_10MHz = 1, //枚举常量,值为 1,代表输出速率最高为 10MHz& &
4.& & GPIO_Speed_2MHz,& && &//对不赋值的枚举变量,自动加 1,此常量值为 2& &
5.& & GPIO_Speed_50MHz& && &//常量值为 3& &
6.&&}GPIOSpeed_TypeDef
1.&&typedef enum&&
2.&&{GPIO_Mode_AIN = 0x0,& && && &&&//模拟输入模式& &
3.& & GPIO_Mode_IN_FLOATING = 0x04,&&//浮空输入模式& &
4.& & GPIO_Mode_IPD = 0x28,& && && & //下拉输入模式& &
5.& & GPIO_Mode_IPU = 0x48,& && && & //上拉输入模式& &
6.& & GPIO_Mode_Out_OD = 0x14,& && & //开漏输出模式& &
7.& & GPIO_Mode_Out_PP = 0x10,& && & //通用推挽输出模式& &
8.& & GPIO_Mode_AF_OD = 0x1C,& && &&&//复用功能开漏输出& &
9.& & GPIO_Mode_AF_PP = 0x18& && && &//复用功能推挽输出& &
10.&&}GPIOMode_TypeD
1.&&typedef struct&&
3.& & uint16_t GPIO_P& && && && & /*指定将要进行配置的 GPIO 引脚*/&&
4.& & GPIOSpeed_TypeDef GPIO_S&&/*指定 GPIO 引脚可输出的最高频率*/&&
5.& & GPIOMode_TypeDef GPIO_M& & /*指定 GPIO 引脚将要配置成的工作状态*/&&
6.&&}GPIO_InitTypeD&&
31.& && &/*选择要控制的 GPIOC 引脚*/& && && && && && && && && && && && && && && && && && && && && &
32.& && &GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;& &
34.& && &/*设置引脚模式为通用推挽输出*/&&
35.& && &GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;& && &
37.& && &/*设置引脚速率为 50MHz */& && &
38.& && &GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-----------------------------------------------------------------------
GPIO控制:
void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct);
功能:根据 GPIOx 初始化GPIO
参数1:允许指为 GPIOA、GPIOB、GPIOC...GPIOG
参数2:GPIO_InitTypeDef 类型的指针,包含了指定引脚、输出工作状态和频率
40.& && &/*调用库函数,初始化 GPIOC*/&&
41.& && &GPIO_Init(GPIOC, &GPIO_InitStructure);
void GPIO_SetBits&&( GPIO_TypeDef *&&GPIOx, uint16_t&&GPIO_Pin)
功能:设置GPIO引脚输出高电平
参数1:允许指为 GPIOA、GPIOB、GPIOC...GPIOG
参数2:要控制的引脚号 Pin0~Pin15
void GPIO_ResetBits&&( GPIO_TypeDef *&&GPIOx, uint16_t&&GPIO_Pin)
功能:设置GPIO引脚输出低电平
参数1:允许指为 GPIOA、GPIOB、GPIOC...GPIOG
参数2:要控制的引脚号 Pin0~Pin15
-----------------------------------------------------------------------
外设时钟控制:
void RCC_APB2PeriphResetCmd&&( uint32_t&&RCC_APB2Periph,&&FunctionalState&&NewState)
功能:开启或关闭的挂接在APB2总线上的外设时钟
& & & & RCC_APB2Periph_AFIO,
& & & & RCC_APB2Periph_GPIOA,
& & & & RCC_APB2Periph_GPIOB,
& & & & RCC_APB2Periph_GPIOC,
& & & & RCC_APB2Periph_GPIOD,
& & & & RCC_APB2Periph_GPIOE,
& & & & RCC_APB2Periph_GPIOF,
& & & & RCC_APB2Periph_GPIOG,
& & & & RCC_APB2Periph_ADC1,
& & & & RCC_APB2Periph_ADC2,
& & & & RCC_APB2Periph_TIM1,
& & & & RCC_APB2Periph_SPI1,
& & & & RCC_APB2Periph_TIM8,
& & & & RCC_APB2Periph_USART1,
& & & & RCC_APB2Periph_ADC3,
& & & & RCC_APB2Periph_TIM15,
& & & & RCC_APB2Periph_TIM16,
& & & & RCC_APB2Periph_TIM17,
& & & & RCC_APB2Periph_TIM9,
& & & & RCC_APB2Periph_TIM10,
& & & & RCC_APB2Periph_TIM11
参数2:使能外设时钟或关闭外设时钟
& & & & ENABLE or DISABLE
void RCC_APB1PeriphClockCmd&&( uint32_t&&RCC_APB1Periph, FunctionalState&&NewState)
功能:开启或关闭的挂接在APB2总线上的外设时钟
& & & & RCC_APB1Periph_TIM2,
& & & & RCC_APB1Periph_TIM3,
& & & & RCC_APB1Periph_TIM4,
& & & & RCC_APB1Periph_TIM5,
& & & & RCC_APB1Periph_TIM6,
& & & & RCC_APB1Periph_TIM7,
& & & & RCC_APB1Periph_WWDG,
& & & & RCC_APB1Periph_SPI2,
& & & & RCC_APB1Periph_SPI3,
& & & & RCC_APB1Periph_USART2,
& & & & RCC_APB1Periph_USART3,
& & & & RCC_APB1Periph_USART4,
& & & & RCC_APB1Periph_USART5,
& & & & RCC_APB1Periph_I2C1,
& & & & RCC_APB1Periph_I2C2,
& & & & RCC_APB1Periph_USB,
& & & & RCC_APB1Periph_CAN1,
& & & & RCC_APB1Periph_BKP,
& & & & RCC_APB1Periph_PWR,
& & & & RCC_APB1Periph_DAC,
& & & & RCC_APB1Periph_CEC,
& & & & RCC_APB1Periph_TIM12,
& & & & RCC_APB1Periph_TIM13,
& & & & RCC_APB1Periph_TIM14
参数2:使能外设时钟或关闭外设时钟
& & & & ENABLE or DISABLE
【注意】:如果用到了I/O引脚的复用功能,则还要开启其复用功能的时钟。
如GPIOC的Pin4还可以作为ADC1的输入引脚,我们把它作为ADC1来使用,
那么除了要开启GPIOC时钟外,还需要开启ADC1的时钟。
例子:& & & &
& & & & RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
& & & & RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1, ENABLE);
-----------------------------------------------------------------------
-----------------------------------------------------------------------
启动文件:startup_stm32f10x_hd.s
1.&&;Reset_Handler 子程序开始&&芯片被复位的时候会执行&&
2.&&Reset_Handler& &PROC& && &
3.& && && &
4.& &;输出子程序 Reset_Handler 到外部文件& &
5.& && && && && &&&EXPORT&&Reset_Handler& && && && &[WEAK]& &
7.&&;从外部文件中引入 main 函数& &
8.& && && && &IMPORT&&__main& &
10.&&;从外部文件引入 SystemInit 函数& && && && && && && && && && && && && &
11.& && && && &IMPORT&&SystemInit
12.& && && && && && && &
13.&&;把 SystemInit 函数调用地址加载到通用寄存器 r0& &
14.& && && && && && &LDR& &&&R0, =SystemInit& &&&
15.& && && &
16.&&;跳转到 r0 中保存的地址执行程序(调用 SystemInit 函数 用于设置系统时钟)& &
17.& && && && && && &BLX& &&&R0& && && && &&&
18.& && && && && &
19.&&;把 main 函数调用地址加载到通用寄存器 r0& &
20.& && && && && && &LDR& &&&R0, =__main& &&&
22.&&;跳转到 r0 中保存的地址执行程序(调用 main 函数)& && && &
23.& && && && && && &BX& && &R0& &
24.& && && && && && && && &
25.&&;Reset_Handler 子程序结束& &
26.& && && && && && &ENDP&&
启动代码中,它会调用SystemInit(),SysteInit()会先将与配置时钟相关的寄存器复位为默认值。
然后它再调用SetSysClock()函数:
1.&&static void SetSysClock(void)& &
3.&&#ifdef SYSCLK_FREQ_HSE& &
4.& & SetSysClockToHSE();& &
5.&&#elif defined SYSCLK_FREQ_24MHz& &
6.& & SetSysClockTo24();& &
7.&&#elif defined SYSCLK_FREQ_36MHz& &
8.& & SetSysClockTo36();& &
9.&&#elif defined SYSCLK_FREQ_48MHz& &
10.& & SetSysClockTo48();& &
11.&&#elif defined SYSCLK_FREQ_56MHz& &
12.& & SetSysClockTo56();& &&&
13.&&#elif defined SYSCLK_FREQ_72MHz& &
14.& & SetSysClockTo72();& && & & & & & & & // 配置相关寄存器
15.&&#endif& &
SetSysClock()才是真正配置系统时钟函数,会根据宏来进行不同频率的配置。
由system_stm32f10x.c文件启用宏。
1.&&#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)& &
2.&&/* #define SYSCLK_FREQ_HSE& & HSE_VALUE */&&
3.& &#define SYSCLK_FREQ_24MHz&&& &
4.&&#else& &
5.&&/* #define SYSCLK_FREQ_HSE& & HSE_VALUE */&&
6.&&/* #define SYSCLK_FREQ_24MHz&& */& &
7.&&/* #define SYSCLK_FREQ_36MHz&& */&&
8.&&/* #define SYSCLK_FREQ_48MHz&& */&&
9.&&/* #define SYSCLK_FREQ_56MHz&& */&&
10.&&#define SYSCLK_FREQ_72MHz&&& &
11.&&#endif
-----------------------------------------------------------------------
 跟着楼主教程学习,谢谢!
 跟楼主学习
跟楼主学习,谢谢!
楼主威武,很厉害
学习了,可惜还是没搞好,杯具~~
谢谢楼主指导!
谢谢楼主分享。
win10必须是管理员权限才能进入仿真。。。
Powered by}

我要回帖

更多关于 stm32 指针 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信