打印

【连载】STM32f107&f407开发板(科星F107)学习笔记基础篇(更新中

[复制链接]
23135|128
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ren0zhe|  楼主 | 2013-9-10 17:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ren0zhe 于 2013-10-29 16:46 编辑



本帖为学习笔记基础篇,学习笔记网络篇的链接为:
https://bbs.21ic.com/icview-631144-1-1.html  和
https://bbs.21ic.com/icview-623849-1-2.html


写在前面的话:

      本笔记是以科星F107开发板( MCU型号:STM32F107VCT6)为硬件平台的,它集成了F103和F105的所有功能,有USB以太网接口。它拥有目前最流行的内核:Cortex-M3。笔记的工程全部是IAR6.4创建的。

我们的特点:除了学习GPIO、串口、IIC等基本模块之外,我们着重学习以太网方面的知识。涉及FreeRTOS和LwIP等。

学习笔记中涉及到的安装程序学习笔记pdf版及一些视频教程等所有的材料都会在百度网盘中逐步更新,敬请期待
http://pan.baidu.com/s/189GwD



开发板有F107和F407两款核心板,底板是通用的,产品图如下:





下面附上科星F107开发板的原理图
        
原理图的pdf版请下载附件
科星F107开发板—核心板原理图.pdf (87.03 KB)

科星F107开发板—底板原理图.pdf (122.46 KB)


科星F107 功能指示图

硬件功能包含:

     Ø Led控制
     Ø 模拟ADC
     Ø IIC 存储
     Ø 外部中断
     Ø RTC实时时钟
     Ø 串口
     Ø Can操作两个
     Ø 485通信
     Ø Usb从
     Ø Usb主读u盘
     Ø 网络接口
     Ø Sd卡文件系统
扩展插针
     n 无线2.4G
     n 红外学习控制
     n 继电器控制
     n Tft彩屏


请关注后续跟帖,我们将陆续更新

沙发
hkcj| | 2013-9-10 18:37 | 只看该作者
好帖子  学习帖子  必须要支持一个  楼主  一定要**啊   相信你

使用特权

评论回复
板凳
ren0zhe|  楼主 | 2013-9-10 19:29 | 只看该作者
hkcj 发表于 2013-9-10 18:37
好帖子  学习帖子  必须要支持一个  楼主  一定要**啊   相信你

恩恩,谢谢,刚开始发帖,传图片,链接啥的好麻烦,我先升级下级别,后续边学变发,多谢支持

使用特权

评论回复
地板
ren0zhe|  楼主 | 2013-9-11 09:11 | 只看该作者
本帖最后由 ren0zhe 于 2013-9-12 16:33 编辑



俗话说,万事开头难!

有了我们的学习笔记和开发板,你看它还难不难???!!!




第一节   IAR6.4程序的安装


IAR6.4安装程序和**文件请在网盘下载

http://pan.baidu.com/share/link?shareid=3008452898&uk=2886683799

详细学习笔记内容请看附件
科星F107开发板学习笔记—IAR6.4的安装.pdf (1.37 MB)

安装的视频请在网盘中下载
http://pan.baidu.com/share/link?uk=2886683799&shareid=3205147279#dir/path=%2F2013%E5%B9%B4%E7%A7%91%E6%98%9FF107%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E8%B5%84%E6%96%99%E5%A4%A7%E5%85%A8%2F%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B8%AD%E7%9A%84%E8%A7%86%E9%A2%91

使用特权

评论回复
5
ren0zhe|  楼主 | 2013-9-11 14:21 | 只看该作者
希望大家顶起来,**2天一个帖子,有什么错误的地方也希望大家指出来,一同进步

使用特权

评论回复
6
cjhk| | 2013-9-11 18:50 | 只看该作者
很好的学习帖子  不错   楼主  **哦   需要跟在你后面好好普及一下这上面的知识点   谢谢楼主

使用特权

评论回复
7
cjhk| | 2013-9-11 18:51 | 只看该作者
再好好顶一个   希望有更多的朋友能够加入进来  一起学习  

使用特权

评论回复
8
ren0zhe|  楼主 | 2013-9-11 20:39 | 只看该作者
cjhk 发表于 2013-9-11 18:50
很好的学习帖子  不错   楼主  **哦   需要跟在你后面好好普及一下这上面的知识点   谢谢楼主  ...

非常感谢,哥们,一起加油!

使用特权

评论回复
9
网络转接| | 2013-9-12 16:10 | 只看该作者
好东西啊 顶

使用特权

评论回复
10
网络转接| | 2013-9-12 18:56 | 只看该作者

使用特权

评论回复
11
trumpxp| | 2013-9-12 19:02 | 只看该作者
好好看看   先   谢谢了   楼主    这一块   要好好钻研钻研   先谢谢了

使用特权

评论回复
12
ren0zhe|  楼主 | 2013-9-13 10:18 | 只看该作者
trumpxp 发表于 2013-9-12 19:02
好好看看   先   谢谢了   楼主    这一块   要好好钻研钻研   先谢谢了

多谢支持

使用特权

评论回复
13
ren0zhe|  楼主 | 2013-9-13 15:20 | 只看该作者
本帖最后由 ren0zhe 于 2013-10-29 16:43 编辑

第二节              新建IAR6.4工程

人家都有现成的工程,我们为何还要学习新建工程呢?


比如目前大量的实例工程全是IAR5.4的,但是老板要求用新的IAR平台IAR6.4,找到的例程恰好不能在IAR6.4上使用,看来技术还是掌握在自己手里最稳妥,主要也不是很难,所以这一节咱们学习一下空工程的建立。我们这里给出pdf教程和视频教程。


pdf版教程
       附件
       2科星F107开发板学习笔记—新建空工程.pdf (919.96 KB)

    网盘下载地址
         http://pan.baidu.com/share/link?shareid=2823938836&uk=2886683799


视频教程
            网盘下载地址
       http://pan.baidu.com/share/link?shareid=2843755899&uk=2886683799


新建好的空工程文件
        附件
      2科星F107开发板学习笔记源码—新建空工程.rar (692.3 KB)

      网盘下载地址
     http://pan.baidu.com/share/link?shareid=2854853921&uk=2886683799






使用特权

评论回复
14
outstanding| | 2013-9-14 11:05 | 只看该作者

使用特权

评论回复
15
GULANGGOGO| | 2013-9-14 14:26 | 只看该作者
占座

使用特权

评论回复
16
1849097455| | 2013-9-14 15:32 | 只看该作者

使用特权

评论回复
17
ren0zhe|  楼主 | 2013-9-16 09:17 | 只看该作者
网络转接 发表于 2013-9-12 16:10
好东西啊 顶

多谢支持!

使用特权

评论回复
18
ren0zhe|  楼主 | 2013-9-16 21:20 | 只看该作者
outstanding 发表于 2013-9-14 11:05

使用特权

评论回复
19
ren0zhe|  楼主 | 2013-9-17 09:38 | 只看该作者
1849097455 发表于 2013-9-14 15:32

使用特权

评论回复
20
ren0zhe|  楼主 | 2013-9-17 10:15 | 只看该作者
本帖最后由 ren0zhe 于 2013-9-25 14:10 编辑

第三章   点亮发光二极管


本章主要讲了三个方面的知识点
1、时钟配置
2、单步调试
3、GPIO口的配置



学习笔记的pdf版
3科星F107开发板学习笔记—点亮LED灯

3科星F107开发板学习笔记—点亮LED灯.pdf (1.56 MB)

源码文件
3科星F107开发板学习笔记源码—点亮LED灯

3科星F107开发板学习笔记源码—点亮LED灯.rar (2.34 MB)

视频教程(请点击下面的链接,进入百度网盘中下载)
3科星F107开发板学习笔记视频—点亮LED灯
http://pan.baidu.com/share/link?shareid=2507935589&uk=2886683799



部分内容如下,详细的请下载附件


时钟对单片机有多重要呢?
可以说单片机,没有了时钟将不能工作;单片机的时钟设置错误了,它将不能正常工作。单片机里面运行的是一条条的指令,运行一条指令的时间是由时钟决定的,可谓单片机之根本,所以时钟这里一定不能出错。
科星F107开发板,使用的是25M的外部晶振,因为一颗25M的外部晶振就可以给各个外设包括USB和以太网提供时钟了。
这里准备使用HSE(外部高速时钟)作为PLL时钟源,PLL时钟作为总线时钟,这里有比较多的专业词汇,刚开始接触的朋友可能比较难理解,后面我们将一一对这些专业术语进行生动的解释。
下面我就以在咱们科星F107开发板上配置72M总线时钟为例讲一下时钟的配置过程。
现在就打开上一节中新建的LED灯的闪烁的空工程,在main.c函数中调用配置时钟的函数SystemInit();如下图

之后点Make链接一下,如下图

然后右击SystemInit();点“Go to Definition of SystemInit”就可以进入到函数SystemInit()定义的位置,及函数内容,如下图




下面咱们就来研究ST公司给咱提供的函数,前面一堆设定RCC寄存器的东西,想知道详情的可查看寄存器手册中对RCC的定义,MCU寄存器中英文手册下载地址如下:

RCC在手册中的位置如下图:

CR、CFGR等都可以在这个手册中找到,其实暂时也没必要去细细研究这些,在函数中,每一行代码前面都有一行注释的,看一下注释就大概清楚该句话的作用的了,下面咱们着重研究“SetSysClock()”函数,如下图,它的意思就是设置系统时钟。

下面我们跟上面一样右击该函数,点“Go to Definition of SetSysClock”,进入之后如下图:

这个函数就写的很明白了,就是设置系统时钟为不同的频率数,最大72M,最小24M,还有使用HSE时钟的。很多人这时会有疑问了,这里选用哪个作为系统时钟是在哪设定的呢?下面我们看该函数所在的这个文件的前面几行代码,找到以下这段代码,找不到的请使用查找功能,“Ctrl+F”会弹出查找的对话框,搜一下就可以了
#if defined (STM32F10X_LD_VL) || (definedSTM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
#defineSYSCLK_FREQ_24MHz  24000000
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000 */
/* #define SYSCLK_FREQ_36MHz  36000000 */
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
#define SYSCLK_FREQ_72MHz  72000000
#endif
这里还有另外一种方法就是看代码所在的行数,如下图所示,红色标记部分会显示光标所在的行数,该行代码在106行,这样就很容易查找了。如下图

下面我们一起来看这段代码,这里是一个if…else结构的宏定义语句,其实跟普通的if…else…的作用是一样的,前面那句if
#if defined (STM32F10X_LD_VL) || (definedSTM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
#defineSYSCLK_FREQ_24MHz  24000000
这里的“STM32F10X_LD_VL”、“STM32F10X_MD_VL”和“STM32F10X_HD_VL”是所用单片机的类型,前面咱们提到过的,小存储容量,大存储容量等,咱开发板用的是互联型MCU,带有CLConnectivity line)后缀的,之前咱们设定好的,这里就有用了,如下图

所以这里的if里面没有,所以就执行 else语句了
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000 */
/* #define SYSCLK_FREQ_36MHz  36000000 */
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
#define SYSCLK_FREQ_72MHz  72000000
这里else语句里面其它时钟值默认是注释掉的,只宏定义了72M,所以,库中默认系统时钟是72M的,这里如果需要改为24M的,就把24M那一行去掉注释,将72M一行加上注释,效果如下:
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
#defineSYSCLK_FREQ_24MHz  24000000
/* #define SYSCLK_FREQ_36MHz  36000000 */
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
/*#define SYSCLK_FREQ_72MHz  72000000 */
这里就定义了咱们的“SetSysClock()”函数执行的是
file:///C:/Users/ZM/AppData/Local/Temp/msohtmlclip1/01/clip_image016.png这条语句。同样,我们右击这个函数,看一下这个函数是如何实现的,
咱们的外部晶振用的是25M的,需不需要改动一些设置呢?
25M的外部晶振,是如何分频,倍频出来的72M呢?
下面我们进函数看看,着重看函数中的下面部分:

这里跟刚才的结构也是一样的,也是if…else…结构的,也是靠宏定义的,
#ifdefSTM32F10X_CL
    /* Configure PLLs------------------------------------------------------*/
    /* PLL2 configuration: PLL2CLK = (HSE / 5)* 8 = 40 MHz */
/* PREDIV1 configuration: PREDIV1CLK = PLL2 /5 = 8 MHz */
刚才的设定这里也用到了

程序中的注释也写明了,计算的方法了,HSE25M,然后一系列计算得到8M的预分频时钟,后面再9倍频,就得到了72M的系统时钟了。

但是这里有一个疑问,这里没有提到HSE是多少啊?看下图

main函数包含的头文件“stm32f10x.h”中做出了定义,当类型是“STM32F10X_CL”,默认“HSE_VALUE”的值为25M,如果是其它类型的MCU,就默认为8M的外部晶振,因为科星F107开发板使用的是25M外部晶振,所以在这里咱们就使用默认值就可以了,不用做任何改动了。这个问题也解决了。

刚才计算总线时钟的地方,单纯看公式还是比较抽象的,芯片手册中有一个时钟树,大家可以看一下,下图中对时钟树做了一些标记,可以让我们更形象的了解,从25M的外部晶振是经过什么一系列的过程计算出72M的系统时钟的,看下图:


使用25M外部晶振配置72M总线时钟的流程为“31920572189

真正进行系统时钟计算的就是如下指令了:
    /* Configure PLLs------------------------------------------------------*/
    /* PLL2 configuration: PLL2CLK = (HSE / 5)* 8 = 40 MHz */
    /* PREDIV1 configuration: PREDIV1CLK = PLL2/ 5 = 8 MHz */
   RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
                              RCC_CFGR2_PREDIV1| RCC_CFGR2_PREDIV1SRC);
   RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
                           RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
…………………..
/* PLL configuration: PLLCLK =PREDIV1 * 9 = 72 MHz */
  RCC->CFGR& =(uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 |RCC_CFGR_PLLSRC_PREDIV1 |
                           RCC_CFGR_PLLMULL9);
RCC_CFGR2_PREDIV2_DIV5”、“RCC_CFGR2_PLL2MUL8等都是宏定义的量,我们可以右击它,查看它的定义,如下图

其实宏定义后面的注释就写的很清楚了,是除以5,也就是5分频的意思,同理,下面的“RCC_CFGR2_PLL2MUL8”就是乘以8,也就是8倍频的意思了,下面的雷同,系统时钟就这样计算出来了。




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

255

帖子

5

粉丝