打印

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

[复制链接]
楼主: ren0zhe
手机看帖
扫描二维码
随时随地手机跟帖
21
ren0zhe|  楼主 | 2013-9-17 13:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
GULANGGOGO 发表于 2013-9-14 14:26
占座

使用特权

评论回复
22
jgphu| | 2013-9-17 17:16 | 只看该作者
MARK

使用特权

评论回复
23
ren0zhe|  楼主 | 2013-9-18 12:05 | 只看该作者
jgphu 发表于 2013-9-17 17:16
MARK

使用特权

评论回复
24
ren0zhe|  楼主 | 2013-9-25 09:34 | 只看该作者
本帖最后由 ren0zhe 于 2013-9-22 09:20 编辑


第四章   定时器中断


本章节主要讲定时器控制LED灯的亮灭,向读者主要解释以下四个问题:

1、  中断定时器的时钟是以什么时钟为时钟源?
APB1的一个倍频器为定时器时钟提供内部时钟,详见芯片手册中的时钟树。
2、  定时器根据定时器时钟如何设定中断发生的时间?
由公式“发生中断时间=(TIM_Prescaler+1)*(TIM_Period+1)/FLK”计算出来的
3、  中断向量表如何设置的?
详见“void NVIC_Configuration(void)”函数的解释
4、  中断处理函数在哪写?
中断处理函数是在“stm32f10x_it.c”中,添加处理函数“void TIM2_IRQHandler(void)”,详细的介绍请看上面的内容。


详细的内容请见附件
pdf版学习笔记
4科星F107开发板学习笔记—定时器中断.pdf (479.64 KB)

源码
4科星F107开发板学习笔记源码—定时器中断.rar (2.78 MB)


还有视频演示(请在网盘下载)
http://pan.baidu.com/share/link?shareid=1392291587&uk=2886683799




使用特权

评论回复
25
网络转接| | 2013-9-25 16:06 | 只看该作者
我的网络篇马上跟上

使用特权

评论回复
26
chuangpu| | 2013-9-25 19:51 | 只看该作者
很好玩的东西   楼主   比较靠谱   比较给力   不错    需要花时间好好看那看    谢谢楼主

使用特权

评论回复
27
ren0zhe|  楼主 | 2013-9-26 09:45 | 只看该作者
本帖最后由 ren0zhe 于 2013-9-27 10:08 编辑

第五节          SysTick定时器中断



学习笔记请见附件:
5科星F107开发板学习笔记—SysTick定时器中断.pdf (434.23 KB)

源码例程见附件:
5科星F107开发板学习笔记源码—SysTick定时器中断.rar (2.54 MB)

视频教程请在百度网盘下载,路径如下:
http://pan.baidu.com/share/link?shareid=1497904138&uk=2886683799




学习笔记部分内容如下:详细内容请下载附件查看

学习代码之前我们再明确下SysTick 定时器的定义和作用

1、什么是SysTick 定时器?
SysTick 是一个24位的倒计数定时器,当计到0时,将从RELOAD寄存器中自动重装载定时初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。
2、设置SysTick定时器的作用?
1)产生操作系统的时钟节拍
SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。
2)便于不同处理器之间程序移植。
Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟( CM3处理器上的STCLK信号)。
不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要检视芯片的器件手册来决定选择什么作为时钟源。SysTick定时器能产生中断,CM3为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间对其处理都是相同的。
3)作为一个闹铃测量时间。
SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。
这里我们也要带着两个问题进行下面的学习
1、  SysTick 定时器的时钟源在哪里设置?
2、  SysTick 定时器是如何计时的?
下面我们开始SysTick 定时器的学习,还是在第三节中编写的点亮LED灯的代码的基础上改写,没有该代码的朋友请在以下路径的网盘上面下载:


..................................

SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |  
               SysTick_CTRL_TICKINT_Msk   |
           SysTick_CTRL_ENABLE_Msk;
SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk的意思就是选择系统时钟72M为时钟源,解释如下:
先找到SysTick_CTRL_CLKSOURCE_Msk的定义,如下图

1 UL就是 1 unsignedlong
所以SysTick_CTRL_CLKSOURCE_Msk的意思就是1<<2=1xx
也就是寄存器的bit2位为1,看手册bit2位为CLKSOURCE: Clock source selection
Selectsthe clock source.
  
所以咱们这里选择的时钟源是AHB,在第三节时钟的配置部分,我们有讲过的,AHB时钟=系统时钟=72M。
同样,下面两个SysTick->CTRL寄存器的定义如下:



使用特权

评论回复
28
outstanding| | 2013-9-26 10:32 | 只看该作者

使用特权

评论回复
29
网络转接| | 2013-9-27 10:24 | 只看该作者
ok

使用特权

评论回复
30
xxiao6130| | 2013-9-27 10:39 | 只看该作者
好复杂

使用特权

评论回复
31
ren0zhe|  楼主 | 2013-9-28 10:37 | 只看该作者
xxiao6130 发表于 2013-9-27 10:39
好复杂

使用特权

评论回复
32
ren0zhe|  楼主 | 2013-9-29 09:48 | 只看该作者
outstanding 发表于 2013-9-26 10:32

使用特权

评论回复
33
ren0zhe|  楼主 | 2013-9-30 09:33 | 只看该作者
第六节   串口学习之串口输出


本章主要讲了两个个方面的知识点
1、串口配置
2、printf函数的重定义及使用



详细内容请见附件:

pdf版学习笔记

6科星F107开发板学习笔记—串口学习之串口输出.pdf (532.7 KB)

源码工程文件
6科星F107开发板学习笔记源码—串口学习之串口输出.rar (2.71 MB)

视频教程下载链接
http://pan.baidu.com/share/link?shareid=1629117830&uk=2886683799





部分内容如下


串口可以把很多单片机内的信息打印到电脑上,便于我们代码的调试与编写,我们这里来学习一下串口的打印输出。
一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。
串行接口 (Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
UART(UniversalAsynchronous Receiver/Transmitter)是异步串行,通用异步接收/发送。UART是一个并行输入成为串行输出的芯片。UART包含TTL电平的串口和RS232电平的串口。 TTL电平是3.3V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平,MDS2710、MDS SD4、EL805等是RS232接口,EL806有TTL接口。
RS-232采取不平衡传输方式,即所谓单端通讯。由于其发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。
下面来看科星F107开发板的串口的原理图:
                              
引脚PA9和PA10是通过排针从核心板引到底板,然后经过RS232芯片输出串口数据。
跳线:短接图示的引脚
如下图:
科星F107开发板发货时这些短路帽是默认接好的。
代码是根据库里面带的实例工程修改的,使用了c语言中printf函数的重定义,以便能支持STM32f107的环境。
下面我们进行源代码的编写:
首先我们打开,第二节中新建的空工程,没有的朋友可以在下面的链接中找到:
下面我们打开这个工程,
第一步,由于我们这里要使用到库文件中串口配置的函数,这里需要添加外设库文件stm32f10x_usart.c,该文件的路径为“\Libraries\STM32F10x_StdPeriph_Driver\src”,添加完成后,如下图
第二步,右击工程文件名,打开“Options”,找到“GerenalOptions”中的“Library Configuration”,在Library选项选择“Full”,后面的描述也写的很清楚了,然后就可以调用,C语言的printf函数了。如下图:
第三步,添加C语言标准输入输出的头文件#include <stdio.h>
串口的配置使用跟GPIO口的配置使用差不多,也是使用库提供的结构体,来定义串口的波特率,校验方式,数据位等参数,完整的代码如下,请直接复制到工程中main.c文件中就可以了,代码如下:
/* Includes------------------------------------------------------------------*/
#include "stm32f10x.h"
#include <stdio.h>
USART_InitTypeDef USART_InitStructure;
void GPIO_Configuration(void);
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LDLinker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
int main(void)
{
  SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1| RCC_APB2Periph_AFIO,ENABLE);
  GPIO_Configuration();  
  
  USART_InitStructure.USART_BaudRate= 115200;      //波特率115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b;  //数据位 8
  USART_InitStructure.USART_StopBits= USART_StopBits_1;     //1位停止位
  USART_InitStructure.USART_Parity =USART_Parity_No;      //无校验
  USART_InitStructure.USART_HardwareFlowControl= USART_HardwareFlowControl_None;                      //流控制
  USART_InitStructure.USART_Mode =USART_Mode_Rx | USART_Mode_Tx;
  USART_Init(USART1,&USART_InitStructure);
  USART_Cmd(USART1, ENABLE);
  
  printf("\n\r");
  printf("\n\r   CORX F107 开发板 USART Study   \n\r");
  printf("\n\r      www.stmsky.com/bbs    \n\r");
  printf("\n\r           stm家园    \n\r");
  printf("\n\r     QQ交流群 144728423   \n\r");
  printf("\n\r  http://corxstm32.taobao.com    \n\r");
  printf("\n\r");
  
  while (1)
  {
  }
}
void GPIO_Configuration(void)
{
  GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  /* Configure USARTx_Tx asalternate function push-pull */
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9;  //前面涉及到了,Tx是PA9
  GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
  /* Configure USARTx_Rx as inputfloating */
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10;   //前面涉及到了,Rx是PA10
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
}
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART1, (uint8_t) ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{}
return ch;
}
蓝色字体部分的代码就是对printf函数进行重定义,作用就是把c语言中的printf函数移植到了IAR编译stm32f107的MCU的环境中,类似高级语言的“重载”。
然后Make,之后将程序下载到开发板上,连接(USB转)串口线,然后安装USB转串口驱动,驱动下载链接如下:
安装好后,打开串口调试助手,没有的朋友可以在以下链接下载:
打开串口调试助手,配置如下图:
程序代码是每次复位,输出一串字符串,按一次开发板的复位键,串口调试助手就会打印出我们程序中要打印的信息,如下图所示:
这里配置的波特率,数据位,停止位,校验位和流控制都是由代码中决定的,如下图
小贴士:
如果不知道如何选择串口号的话,打开电脑的设备管理器,如下图:
我这里显示的是com1,有些朋友电脑可能显示的是com7或者com15啊比较大的值,但是所用的串口调试助手的com口的选择没有那么多,怎么办呢?修改串口号,其实这个com端口号都是可以自己修改的,修改的方式如下:
右击这个设备,点击属性,如下图:
然后点击 “端口设置”,点“高级”,就可以“COM端口号”的选择框了,然后就可以选择没有被占用的COM端口号了,如下图:
好的,串口输出部分的学习就到这里了。
这里咱们主要讲了printf函数的使用。



使用特权

评论回复
34
地瓜patch| | 2013-9-30 10:05 | 只看该作者
学习了

使用特权

评论回复
35
zhangmangui| | 2013-9-30 10:26 | 只看该作者
谢谢你的分享

使用特权

评论回复
36
ren0zhe|  楼主 | 2013-9-30 11:23 | 只看该作者
zhangmangui 发表于 2013-9-30 10:26
谢谢你的分享

多谢关注!希望在我更新完后给予置酷哦,我会更加努力的,现在写0基础的,后面会更多网络方面的

使用特权

评论回复
37
zhangmangui| | 2013-9-30 11:30 | 只看该作者
ren0zhe 发表于 2013-9-30 11:23
多谢关注!希望在我更新完后给予置酷哦,我会更加努力的,现在写0基础的,后面会更多网络方面的[em:qb03: ...

还要向你多多学习

使用特权

评论回复
38
ren0zhe|  楼主 | 2013-9-30 11:32 | 只看该作者
zhangmangui 发表于 2013-9-30 11:30
还要向你多多学习

客气客气!相互交流,共同进步,希望有错误的地方给指出来,多谢支持

使用特权

评论回复
39
zhangmangui| | 2013-9-30 12:15 | 只看该作者
ren0zhe 发表于 2013-9-30 11:32
客气客气!相互交流,共同进步,希望有错误的地方给指出来,多谢支持

使用特权

评论回复
40
ren0zhe|  楼主 | 2013-10-3 21:27 | 只看该作者
zhangmangui 发表于 2013-9-30 12:15

使用特权

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

本版积分规则