查看: 47|回复: 0

[经验] 带你走进STM32的世界

[复制链接]

4

主题

0

好友

35

积分

白丁

Rank: 1

  • TA的每日心情
    开心
    2017-8-4 15:09
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2017-8-7 15:10:25 |显示全部楼层
    STM32F10xx时钟系统框图:时钟是整个系统的脉搏
    下图是STM32F10xx时钟系统的框图,通过这个图可以一目了然地看到各个部件时钟产生的路径,还可以很方便地计算出各部分的时钟频率。
    STM32的四个时钟源(HSI、HSE、LSI和LSE)也在图中标出;图中间的时钟监视系统(CSS)是在很多ST7的单片机中就出现的安全设置。特别注意:图的右边,输出定时器时钟之前有一个乘法器,它的操作不是由程序控制的,是由硬件根据前一级的APB预分频器的输出自动选择,当APB预分频器的分频因子为1时,这个乘法器无作用;当APB预分频器的分频因子大于1时,这个乘法器做倍频操作,即将APB预分频器输出的频率乘2,这样可以保证定时器可以得到最高的72MHz时钟脉冲。
    STM32上很多管脚功能可以重新映射
    STM32上有很多I/O口,也有很多的内置外设,为了节省引出管脚,这些内置外设都是与I/O口共用引出管脚,ST称其为I/O管脚的复用功能,相信这点大家都很清楚,因为基本上所有单片机都是这么做的。但不知有多少人知道,很多复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变的。
    这一功能的直接好处是,PCB电路板的设计人员可以在需要的情况下,不必把某些信号在板上绕一大圈完成联接,方便了PCB的设计同时潜在地减少了信号的交叉干扰。复用功能引出脚的重映射功能所带来的潜在好处是,在你不需要同时使用多个复用功能时,虚拟地增加复用功能的数量。例如,STM32上最多有3个USART接口,当你需要更多UART接口而又不需要同时使用它们时,可以通过这个重映射功能实现更多的UART接口。
    下述复用功能的引出脚具有重映射功能:
    - 晶体振荡器的引脚在不接晶体时,可以作为普通I/O口
    - CAN模块
    - JTAG调试接口
    - 大部分定时器的引出接口
    - 大部分USART的引出接口
    - I2C1的引出接口
    - SPI1的引出接口
    详细内容请看STM32的技术参考手册。
    请务必记住:如果使用了任意一种重映射功能,在初始化和使用之前,一定要打开AFIO时钟。
    下图示出了部分复用功能引出脚的重映射结果:
    【演示实例】一个在EK-STM32F板子上的RTC作为calender的例子
    硬件连接:串口线连至板子的UART-0端口。超级终端设置为:
    Bits Per seconds: 115200
    Data bits: 8
    Parity: none
    Stop bits: 1
    Flow control Hardware
    板子第一次跑这个程序时,进入时间配置。
    根据超级终端上的提示,一次输入年,月,日,时,分,秒
    1月就输入01,10月直接输入10;同理3号就输入03)
    随后当前的时间就显示到了超级终端上,并且每秒刷新。
    没有断电的情况下再跑这个程序,由于看到bake up区域有被设置过时间的标志,不再进入时间设置阶段,而是直接到时间显示间断,在超级终端上,每秒刷新。
    当然如果在EK-STM32F板子上将Vbat和电池相接,具体就是:将红色的电源跳线帽中的从下往上数的第5个取下,从原来的水平放置改成竖直放置(和上面的VBAT相连)。就算断电,只要再上电,看到back up区域中的记号,一样直接进入时间显示。因为断电后,back up区域由电池供电,其中记录的记号不会由于系统掉电而消失。
    【演示实例】使用EK-STM32F板测量STM32的功耗
    这个例子演示了如何使用EK-STM32F开发评估板测量STM32F103VBT6在各种模式下的功耗。例子中演示了如何进入STM32的各种模式(RUN、SLEEP、STOP、STANDBY),使用这个例子您可以通过EK-STM32F板上的红色跳线(VDD、VREF+和VDDA)测量功耗。
    本实例首先通过UART与Windows的Hyperterminal通信,用户可以选择需要进入的功耗模式,然后这个例程把用户选好的配置存到后备寄存器,再次复位后STM32将进入之前选定的模式。
    附件包中包含了一个说明文件,详细说明了如何设置板上的跳线和操作的过程。
    STM32 GPIO的十大优越功能综述
    前几天Hotpower邀请大家讨论一下GPIO的功能、性能和优缺点(STM32的GPIO很强大~~~),等了几天没见太多人发言,但综合来看提到了3点:1)真双向IO,2)速度快,3)寄存器功能重复。关于第3点有说好,有说多余的,见仁见智。
    下面我就在做个抛砖引玉,根据ST手册上的内容,简单地综述一下GPIO的功能:
    一、共有8种模式,可以通过编程选择:
    1. 浮空输入
    2. 带上拉输入
    3. 带下拉输入
    4. 模拟输入
    5. 开漏输出——(此模式可实现hotpower说的真双向IO)
    6. 推挽输出
    7. 复用功能的推挽输出
    8. 复用功能的开漏输出
    模式7和模式8需根据具体的复用功能决定。
    二、专门的寄存器(GPIOx_BSRR和GPIOx_BRR)实现对GPIO口的原子操作,即回避了设置或清除I/O端口时的“读-修改-写”操作,使得设置或清除I/O端口的操作不会被中断处理打断而造成误动作。
    三、每个GPIO口都可以作为外部中断的输入,便于系统灵活设计。
    四、I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这有利于噪声控制。
    五、所有I/O口兼容CMOS和TTL,多数I/O口兼容5V电平。
    六、大电流驱动能力:GPIO口在高低电平分别为0.4V和VDD-0.4V时,可以提供或吸收8mA电流;如果把输入输出电平分别放宽到1.3V和VDD-1.3V时,可以提供或吸收20mA电流。
    七、具有独立的唤醒I/O口。
    八、很多I/O口的复用功能可以重新映射,见:你知道吗?STM32上很多管脚功能可以重新映射。
    九、GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。此功能非常有利于在程序跑飞的情况下保护系统中其他的设备,不会因为某些I/O口的配置被改变而损坏——如一个输入口变成输出口并输出电流。
    十、输出模式下输入寄存器依然有效,在开漏配置模式下实现真正的双向I/O功能。
    STM32内置参照电压的使用
    每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17。
    根据数据手册中的数据,这个参照电压的典型值是1.20V,最小值是1.16V,最大值是1.24V。这个电压基本不随外部供电电压的变化而变化。
    不少人把这个参照电压与ADC的参考电压混淆。ADC的参考电压都是通过Vref+提供的。100脚以上的型号,Vref+引到了片外,引脚名称为Vref+;64脚和小于64脚的型号,Vref+在芯片内部与VCC信号线相连,没有引到片外,这样AD的参考电压就是VCC上的电压。
    ADC的外部参考电压波动,或因为Vref+在芯片内部与VCC相连而VCC变化的情况下,如果对于ADC测量的准确性要求不高时,可以使用这个内部参照电压得到ADC测量的电压值。
    具体方法是在测量某个通道的电压值之前,先读出参照电压的ADC测量数值,记为ADrefint;再读出要测量通道的ADC转换数值,记为ADchx;则要测量的电压为:
    Vchx = Vrefint * (ADchx/ADrefint)
    其中Vrefint为参照电压=1.20V。
    上述方法在使用内置温度传感器对因为温度变化,对系统参数进行补偿时就十分有效。

    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-8-24 14:42 , Processed in 0.186559 second(s), 10 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部