OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8056|回复: 29

STM32如何入门

[复制链接]

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
发表于 2013-6-1 10:56:45 | 显示全部楼层 |阅读模式

原子哥,你好;我之前接触过51和PIC单片机;有C语言的基础;很想学习STM32;前不久买了一套正点原子STM32 mini开发板;认真去看过光盘里的资料;如《STM32不完全手册》《原子教你玩STM32视频资料》 ;但对《STM32不完全手册》所讲述的例程感觉十分不理解;感觉该资料可能只适合已经学会的人去看了;看了该资料之后很有一种走马观花的感觉;可能是我个人的基础还没有达到能够看懂这份资料的水准吧;

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2013-6-1 11:09:29 | 显示全部楼层
和51相比,这个确实强大很多;我也是好多概念不清楚,有时搞得很累。但是我相信“读书百遍其义自见”,很多概念迟早会弄懂!战舰板到手快一个月了,我是先从寄存器版本开始学习的,已经自己会写4个实验例程了,感觉快要上手了。慢慢来,不能急。
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-6-1 11:26:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2013-6-1 11:54:37 | 显示全部楼层
我之前读过肖看的51单片机书籍和张明峰的《PIC单片机入门与实践》;都写得很好很适合初学者入门;对于每个初学者而言;可能他更想知道的也更需要知道的是程序中的每一个步骤为什么要这样写?只有在知道这个为什么了理解这个为什么了;才算是把这段程序这本书真正意义上的读懂了;也只有这样;才可能在自己写程序时能够做到应用自如。
出于对电子的热爱;我十分迫切地希望的想学会学好TM32F103RBT6这款单片机;但在一遍遍看了《STM32不完全手册》之后却感觉十分苦恼;因为书中几乎没有一处详细地告诉读者为什么要这样(包括对寄存器的设置等)?今天在这个STM32论坛很荣幸认识大家;希望原子哥老师还有各位朋友;能够给我这个初次接触STM32的新人介绍一本合适的书籍。不甚感激!
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-6-1 12:13:39 | 显示全部楼层
回复【4楼】lony:
---------------------------------
LZ,我现在在学PIC,好痛苦呀。PIC18.你有什么资料吗?代码、开发板什么的最好了。
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-6-1 12:14:47 | 显示全部楼层
STM32有视频教学,前期看看视频学习搭建环境。
后期开STM32函数库,编程指南。
然后就是看例程了。
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2013-6-1 14:40:08 | 显示全部楼层
回复【5楼】wolfdong7:
---------------------------------
不好意思,我没有PIC18的资料。
回复 支持 反对

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2013-6-1 15:29:21 | 显示全部楼层
回复【4楼】lony:
---------------------------------
我也是新手,你说的对寄存器的设置《STM32不完全手册》里面应该都有介绍相关寄存器的用法吧,我是看战舰的手册的,虽然没看过《STM32不完全手册》。对照着上面对寄存器每一位代表上面你就可以看出一点由头来了
回复 支持 反对

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2013-6-1 15:31:24 | 显示全部楼层
代表什么,打成上面了
回复 支持 反对

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2013-6-1 15:47:38 | 显示全部楼层
回复【8楼】czz88:
---------------------------------
《STM32不完全手册》源程序中有对寄存器的介绍;但是基本上都是蜻蜓点水;唉!
回复 支持 反对

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2013-6-1 15:52:38 | 显示全部楼层
回复【10楼】lony:
---------------------------------
静心,细看。我记得大一的时候学S3C6410的时候跟你一样,对那些寄存器什么的一点也看不懂,后面还是自己看着程序对照数据手册才知道原来是这么回事。
回复 支持 反对

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-6-1 16:17:57 | 显示全部楼层
多花精力。
回复 支持 反对

使用道具 举报

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-5-30
在线时间
0 小时
发表于 2013-6-1 16:22:02 | 显示全部楼层
我也是新手,建议使用这几个资料:
固件函数库
寄存器列表
stm32开发指南
回复 支持 反对

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2013-6-1 17:05:59 | 显示全部楼层
我自己刚学STM32,刚看完第三个实验而已。
我刚看了一下不完全手册,跟战舰的也差不多一样, 就拿mini板的第一个实验跑马灯来说吧。
void LED_Init(void)
{
    RCC->APB2ENR|=1<<2;     
    RCC->APB2ENR|=1<<5;        
    GPIOA->CRH&=0XFFFFFFF0; 
    GPIOA->CRH|=0X00000003;  
    GPIOA->ODR|=1<<8;                 
    GPIOD->CRL&=0XFFFFF0FF;
    GPIOD->CRL|=0X00000300;
    GPIOD->ODR|=1<<2; 
}

这个函数,RCC是什么我也不了解,应为刚开始学,只知道是个结构体,里面包含相关的寄存器。APB2ENR就是其中一个。C的语法都懂吧?
RCC->APB2ENR|=1<<2; RCC->APB2ENR|=1<<5; APB2ENR是 APB2 总线上的外设时钟使能寄存器。看下图




mimi板上面的led0和led1分别接在PA8PD2上面的,PA就是GPIOA,PD是GPIOD,对应上面的两个红色框。它们分别对应APB2ENR的第2位和第5位。要使用GPIOx就必须使对应的APB2ENR位置1。讲到这里, RCC->APB2ENR|=1<<2; RCC->APB2ENR|=1<<5; 的意思我想楼主应该懂了。
       
    GPIOA->CRH&=0XFFFFFFF0; 
    GPIOA->CRH|=0X00000003;  
    GPIOA->ODR|=1<<8;                 
    GPIOD->CRL&=0XFFFFF0FF;
    GPIOD->CRL|=0X00000300;
    GPIOD->ODR|=1<<2;
这里的CRH和CRL是端口高8位和低8位配置寄存器。CRL寄存器如下图拿 GPIOD->CRL|=0X00000300;来说

GPIOD->CRL&=0XFFFFF0FF;这里是意思是什么楼主应该懂,我还是讲一下吧PD2就是GPIOD2也就是GPIOD的第2位(从0开始数)CLR&=0xFFFFF0FF等效于CLR=CLR&0xFFFFF0FF,可以看到0的位置就是第二位(这里有点讲得很乱,我这里说的位不是数据的位,是IO口的位,CLR的4位控制一位IO口的模式。乱了吧,呵呵。),效果是把CLR的的8~11位(上图画红线的地方)置0,其他不改变。到这一步只是准备配置IO口工作模式。
GPIOD->CRL|=0X00000300;这里是正式配置了。正如上面所说的PD2是GPIOD的第二位。这里的|是或操作。效果是把CLR的的8~11位(上图画红线的地方)置0x3=0011。对照上图的表可以看到0x3代表推挽输出模式。
GPIOD->ODR|=1<<2; ODR是一个端口输出数据寄存器,为可读可写。只用了低16位0~15。如下图


红色框所对应的IO口就是Px2,我们这里用到的是PD2,所以GPIOD->ODR|=1<<2;你懂的!

另外PA8的操作也一样只不过PA8是GPIOA的高8位,所以用CRH。用法跟CRL一样。

接下来led.h文件
#ifndef __LED_H
#define __LED_H   
#include "sys.h" 
//LED 端口定义
#define LED0 PAout(8)// PA8
#define LED1 PDout(2)// PD2 
void LED_Init(void);//初始化               
#endif
这里 #ifndef __LED_H  #endif 意思是如果 __LED_H没有被定义就执行里面的大写代码。(__LED_H是做什么用的我也不懂,请高手解答
#define LED0 PAout(8)// PA8
#define LED1 PDout(2)// PD2 这两句什么意思应该不用说了吧,它的作用是跟51的sbit一样,其具体看sys.h里面或者看手册59页

接下来main函数里面楼主再熟悉不过了。
不过Stm32_Clock_Init(9);delay_init(72);这两初始化函数理解有点难度。我这水平就不介绍了,请高手解答


以上都是一个新手的理解,哪里不对请大家指出,谢谢!














 


回复 支持 反对

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2013-6-1 17:11:10 | 显示全部楼层

大写两个字是我不小心打上去的,呵呵。忽视它
回复 支持 反对

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2013-6-1 17:24:11 | 显示全部楼层
回复【15楼】czz88:
---------------------------------
这位朋友,非常感谢你的指点;
    RCC->APB2ENR|=1<<2;      RCC->APB2ENR|=1<<5;    请问在这两行程序中 "|"  符号做什么用的?
 为什么不是RCC->APB2ENR=1<<2;      RCC->APB2ENR=1<<5; 呢?
回复 支持 反对

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2013-6-1 18:59:35 | 显示全部楼层
回复【16楼】lony:
---------------------------------
C基础没打好啊!|是按位或,你想一下如果RCC->APB2ENR=1<<2这样的画第0~1位不就被你置位0啦;
这里只能把第2位置为1,其它的不能改变他, RCC->APB2ENR|=1<<2;里面的|运算就可以实现只改变第2位。
举个例子A=0xFFF3=1111 1111 1111 0011
A|=1<<2=0xFFF7=1111 1111 1111 0111
A =1<<2=0x0004=0000 0000 0000 0100
这两种虽然都可以把所需要的位置1,但是后者把其它的位也都改变了,这是不可以的
按位或是这样算的
A             =1111 1111 1111 0011
1<<2      =0000 0000 0000 0100
A|=1<<2=1111 1111 1111 0111
回复 支持 反对

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2013-6-1 19:42:53 | 显示全部楼层
回复【17楼】czz88:
---------------------------------
谢谢你!以后我在学习中遇到疑问还得请你多多指导! 我很想学会STM32单片机;前不久买了一套正点原子 MINI开发板; 在边看《STM32不完全手册》边做实验的过程中遇到不少的疑问;该资料是针对寄存器操作的;程序中为什么要对某一个寄存器操作,又为什么要这样设置某个寄存器;几乎是看不懂也不能理解; 很想买一本能够详细介绍例程方面的书籍,把整个程序的来龙去脉解释清楚; 带着这种心情在网上找了一段时间, 刚买了一本<<ARM Cortex-M3权威指南>>,打算将这本看一遍 对M3有了初步的后; 再边结合开发板边学习《STM32不完全手册》
回复 支持 反对

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2013-6-1 20:00:38 | 显示全部楼层
回复【18楼】lony:
---------------------------------
<<ARM Cortex-M3权威指南>>不是有电子版的吗?看那个会更晕的,至少我是这么觉得,我是这么认为的,刚开始学原子的教程够用了。等入门了看那本书应该会收获更大。你上面说一遍遍看了不完全手册?请问你看到第几个实验了?我是觉得前面入门还挺容易的,呵呵。我就买了一本《原子教你玩STM32》来上课的时候看的,在宿舍都是看电子版的。我刚看完实验三呢,开发板买了两三个月了刚开始学
回复 支持 反对

使用道具 举报

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-5-30
在线时间
0 小时
发表于 2013-6-1 21:21:40 | 显示全部楼层
回复【18楼】lony:
---------------------------------
RCC->APB2ENR|=1<<2; 
其实可以这么理解,在C语言中<<优先级高于|=,所以在执行时先把1左移2位,
即0000 0000 0000 0001变成0000 0000 0000 0100,再跟RCC->APB2ENR按位或
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-6-1 21:48:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

5

主题

70

帖子

0

精华

限制会员

积分
-404
金钱
-404
注册时间
2013-5-17
在线时间
5 小时
发表于 2013-6-1 22:11:04 | 显示全部楼层
如果先学学51就明白这些,但是有学51的功夫还不如多学学stm32。加油吧,楼主
回复 支持 反对

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2013-6-3 09:15:51 | 显示全部楼层
回复【19楼】czz88:
---------------------------------
你好,《原子教你玩STM32》好像有寄存器版和库函数版,对于一个初学者来言,选择从寄存器还是库函数入手容易入门呢?这两天在家里闷着看<<ARM Cortex-M3权威指南>>;有种看天书的感觉。呵呵;想入门真不容易呀!
网上有人说《基于MDK的STM32处理器开发应用》,《STM32自学笔记》《STM32F系列ARM Cortex—M3核微控制器开发与应用》等都适合入门。
回复 支持 反对

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2013-6-3 13:01:32 | 显示全部楼层
回复【23楼】lony:
---------------------------------
寄存器版本和库函数版本哪个适合你你自己看了才知道。你不是买的是mini板吗?那个好像只有寄存器版本的。
不要浮躁啊,慢慢来。《原子教你玩STM32》是配套战舰的哦
回复 支持 反对

使用道具 举报

26

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
432
金钱
432
注册时间
2013-6-3
在线时间
49 小时
发表于 2013-6-3 14:38:55 | 显示全部楼层
入门的话汇编比较简单
回复 支持 反对

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2013-6-3 14:53:13 | 显示全部楼层
回复【24楼】czz88:
---------------------------------
mini 板只有寄存器版本的;配套的书籍是《例说STM32》,请问你是看寄存器版还是库函数版的,你觉得哪个容易入门一点?
回复 支持 反对

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2013-6-3 16:08:23 | 显示全部楼层
回复【26楼】lony:
---------------------------------
我都适合,我现在是两个结合看,两种方式之前在学ARM11的时候都遇到过。不过那时候有老师带但大部分还是靠自己。我觉得你还是先把C基础打好吧,或者找个人带吧。
回复 支持 反对

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2013-6-14 16:58:42 | 显示全部楼层
回复【27楼】czz88:
---------------------------------
C基础没打好啊!|是按位或,你想一下如果RCC->APB2ENR=1<<2这样的画第0~1位不就被你置位0啦; 
这里只能把第2位置为1,其它的不能改变他, RCC->APB2ENR|=1<<2;里面的|运算就可以实现只改变第2位。 
举个例子A=0xFFF3=1111 1111 1111 0011 
A|=1<<2=0xFFF7=1111 1111 1111 0111 
A =1<<2=0x0004=0000 0000 0000 0100 
这两种虽然都可以把所需要的位置1,但是后者把其它的位也都改变了,这是不可以的 
按位或是这样算的 
A             =1111 1111 1111 0011 
1<<2      =0000 0000 0000 0100 
A|=1<<2=1111 1111 1111 0111


我觉得这段话有问题,
首先; RCC->APB2ENR|=1<<2;里面的|运算就可以实现只改变第2位   这是正确的,可以理解!
但是;如果RCC->APB2ENR=1<<2这样的画第0~1位不就被你置位0啦  
      举个例子A=0xFFF3=1111 1111 1111 0011 
        A|=1<<2=0xFFF7=1111 1111 1111 0111 
        A =1<<2=0x0004=0000 0000 0000 0100        这个结果是怎样计算出来的?希望你能够解释一下
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2014-2-15
在线时间
0 小时
发表于 2014-2-18 21:14:34 | 显示全部楼层
回复【14楼】czz88:
---------------------------------精辟,详细,good
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
发表于 2014-2-19 09:00:26 | 显示全部楼层
回复【29楼】石头zzj:
---------------------------------
别挖坟
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-6 07:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表