学习STM32F103ZET6的前期准备

1.前期准备工作

1.1安装MDK514,安装ST-LINK驱动,熟悉MDK5编译器。

以我现在要开发的STM32F103为例,现在我至少需要安装CMSIS和STM32F103的器件支持包。CMSIS包MDK5.14安装时自带了。所以只需要再下载Keil.STM32F1xx_DFP.2.2.0.pack这个器件支持包,双击安装它,会自动识别MDK的安装路径,一直点击至完成安装。
注意:ST-LINK的设置中JTAG 模式和 SWD 模式使用方法都是一样的,不同的是, SWD 接口调试更加节省端口,为了节省更多的资源,建议使用 SWD 模式仿真
上方的USB SLAVE用来实现STM32和电脑的USB通信;下方的USB_232是用来实现USB转串口的,它接CH340芯片,将USB转为串口

1.2复习C语言

1.2.1单片机开发中经常使用,方法就是先对需要设置的位用&操作符进行清零操作,然后用|操作符设值。


比如我要改变GPIOA的状态,可以先对寄存器的值进行&清零操作
GPIOA->CRL&=0XFFFFFF0F; //将第4-7位清0
然后再与需要设置的值进行|或运算
GPIOA->CRL|=0X00000040;//设置相应位的值,不改变其他位的值

1.2.2移位操作提高代码的可读性

GPIOA->ODR |= 1 << 5; //PA.5输出高,不改变其他位
这样我们一目了然,5告诉我们是第5位也就是第6个端口,1告诉我们是设置为1了。

1.2.3~取反操作使用技巧

SR寄存器的每一位都代表一个状态,某个时刻我们希望去设置某一位的值为0,同时其他位都保留为1,简单的作法是直接给寄存器设置一个值:
TIMx->SR = 0xFFF7;
这样的作法设置第3位为0,但是这样的作法同样不好看,并且可读性很差。看看库函数代码中怎样使用的:

TIMx->SR = (uint16_t)~TIM_FLAG;
而TIM_FLAG 是通过宏定义定义的值:
#define TIM_FLAG_Update ((uint16_t)0x0001)
#define TIM_FLAG_CC1 ((uint16_t)0x0002)
#define TIM_FLAG_CC2 ((uint16_t)0x0004)
#define TIM_FLAG_CC3 ((uint16_t)0x0008)
#define TIM_FLAG_CC4 ((int16_t)0x0010)
#define TIM_FLAG_COM ((uint16_t)0x0020)
#define TIM_FLAG_Trigger ((uint16_t)0x0040)
#define TIM_FLAG_Break ((uint16_t)0x0080)
#define TIM_FLAG_CC1OF ((uint16_t)0x0200)
#define TIM_FLAG_CC2OF ((uint16_t)0x0400)
#define TIM_FLAG_CC3OF ((uint16_t)0x0800)
#define TIM_FLAG_CC4OF ((uint16_t)0x1000)

即设置SR第3位为0时可设置为:
TIMx->SR = (uint16_t)~TIM_FLAG_CC3;

1.3工程目录


2.STM32F103ZET6 时钟

  1. 系统上电时刻,默认使用内部 HSI (8M)作为时钟源。HSI时钟信号由内部 8MHz 的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。

    上电后,可以通过选择时钟源来切换时钟到HSE。

  2. 内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟。PLL的设置(选择HIS振荡器除

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值