带你走进STM32

发布者:熙风细雨最新更新时间:2021-06-22 来源: eefocus关键字:STM32  MDK  KeiluVision4 手机看文章 扫描二维码
随时随地手机看文章

简介:使用MDK KeiluVision4进行学习,照着前面几个历程进行学习,看懂几个历程后想自己也照着搞搞,开始有些错误经调试后都解决了,但是在其他问题都解决后,


使用MDK KeiluVision4进行学习,照着前面几个历程进行学习,看懂几个历程后想自己也照着搞搞,开始有些错误经调试后都解决了,但是在其他问题都解决后,编译就出现了More More than one section matches selector - cannot all be FIRST/LAST这个错误,还提示啥包涵了一个错误的路径,本人各种检查路径,和历程的都一样了,可这个问题还没解决,当然后来发现这个不是路径的问题,上网找了好久,终于发现了,在历程中RVMDK以及STM32_EVAL中的几个初始汇编文件前有三个红点,而自己的工程中没有,再找资料才发现了如何设置,在此分享下,希望对大家有帮助:

对需要设置的文件(就是文件上有三个红点的文件,几个历程基本都一样),点右键Options for File'***',勾去灰化的Include in Target Build和Always Build,然后才重新编译,就能顺利通过了。


类型说明------100脚

S - 电源

I - 输入

O - 输出

I/O - 输入输出

FT - 5V 兼容

VDD - 单片机3.3V 电源正

VSS - 单片机3.3V 电源负

VDDA - 单片机A/D 转换器电源正

VSSA - 单片机A/D 转换器电源负

VREF+ - 单片机A/D 转换器参考电压正

VREF- - 单片机A/D 转换器参考电压负


由于STM32F103 系列单片机的内部高速RC 振荡器(HSI)由VDDA、VSSA 供电,故

即使不使用单片机自带的A/D 转换器,也必须保证VDDA、VSSA 的供电,否STM32F103

单片机不能正常启动。在EC30-EKSTM32 核心板的背面,VDDA 和VSSA 分别通过电感连接到VDD 和VSS。如果外部有VDDA、VSSA 的处理电路,需要将背面这两个电感拆除。

STM32F103 有两个独立的12 位A/D 转换器,16 个A/D 转换通道。EC30-EKSTM32 只

使用第1 个A/D 转换器ADC1。16 个A/D 转换通道分布在PA0 ~ PA7、PB0、PB1、PC0 ~ PC5这16 个管脚上,其中任何一个管脚都可以配置为模拟量输入管脚AIWx。


设置NVIC优先级分组,方式。注:一共16个优先级,分为抢占式和响应式。两种优先级所占的数量由此代码确定,NVIC_PriorityGroup_x可以是0、1、2、3、4,分别代表抢占优先级有1、2、4、8、16个和响应优先级有16、8、4、2、1个。规定两种优先级的数量后,所有的中断级别必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。


STM32中有些硬件功能可以由用户自己配置,选择字节用于这些配置。这些通过用户选择字节配置的功能不能简单地通过软件配置,相应的功能必须在芯片上电时存在。如内部的独立看门狗,可以通过用户选择字节配置为做看门狗用,也可以通过用户选择字节配置为做普通计数器用;做看门狗使用时,软件是无法停止它的,所以芯片上电时这个功能就必须有效。


STM32三种启动模式中存储器的存储介质

STM32三种启动模式对应的存储介质均是芯片内置的,它们是:

1)用户闪存 = 芯片内置的Flash。

2)SRAM = 芯片内置的RAM区,就是内存啦。

3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,


BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。


BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以用于调试。

STM32 GPIO端口的输出速度设置

当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。


高频的驱动电路,噪声也高,当你不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。


当然如果你要输出较高频率的信号,但却选用了较低频率的驱动模块,你很可能会得到失真的输出信号。


实际上芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路。


注意:GPIO的引脚速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与你的程序有关。


关键是,GPIO的引脚速度跟应用匹配。

比如对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。


对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。


对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。


关键字:STM32  MDK  KeiluVision4 引用地址:带你走进STM32

上一篇:关于STM32按键中断总结
下一篇:FATfs 在STM32F107VC上的移植过程

推荐阅读最新更新时间:2024-11-05 12:44

STM32超声波测距
超声波测距模块是HC-SR04,C-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测 距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。 HC-SR04基本工作原理: (1)采用IO口TRIG触发测距,给最少10us的高电平信呈。 (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回, 通过IO口ECHO输出一个高电平, 高电平持续的时间就是超声波从发射到返回的时间。 测试距离=(高电平时间*声速(340M/S))/2。 程序编写思路是:1、配置好使用到的GPIO以及定时器; 2、给模块TRIG端口发送大于10us的高电平信号,当收、收到ECHO回响信号是,打开定时
[单片机]
<font color='red'>STM32</font>超声波测距
STM32 ADC调试
使用火牛开发板自带的程序验证ADC的功能,怎么调试打印出来的ADC的值都是0,查看了ADC和DMA寄存器的设置也没什么问题, 修改了ADC的采用速率也不行后来从网上下到一个例子,down进去跑,竟然是正常的,比较了下代码关于ADC的设置都是一样的, 真奇怪的问题,到网站论坛上求助也没什么回复,我用正常的程序一段段替代运行不正常的程序,看看到底什么原因,最终问题发现了, 贴出来以免以后再次遇到: 不正常程序的代码的RCC_Configuration函数: void RCC_Configuration(void) { /* 使能外设时钟 */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, EN
[单片机]
STM32 103 内部定时器不准
system_stm32f10x.c /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz HSE=12M*/ RCC- CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); RCC- CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz HS
[单片机]
九九的STM32笔记(一)TIM模块定时器向上溢出 &am
首先我们必须肯定ST公司的实力,也承认STM32的确是一款非常不错的Cortex-M3核单片机,但是,他的手册实在是让人觉得无法理解,尤其是其中 的TIM模块,没有条理可言,看了两天几乎还是不知所云,让人很是郁闷。同时配套的固件库的说明也很难和手册上的寄存器对应起来,研究起来非常费劲!功能 强大倒是真的,但至少也应该配套一个让人看的明白的说明吧~~   两天时间研究了STM32定时器的最最基础的部分,把定时器最基础的两个功能实现了,余下的功能有待继续学习。   首先有一点需要注意:FWLib固件库目前的最新版应该是V2.0.x,V1.0.x版本固件库中,TIM1模块被独立出来,调用的函数与其他定时器不同;在V2.0系列版本
[单片机]
STM32串口中断接收一个完整的数据帧
代码运行条件: (1) 大端发送; (2) 上位机发送一帧数据的时间间隔不能大于主循环周期; (3)数据帧满足下面格式: 帧头部(Head) 类型(Type) 长度(Length) 值(Value) CRC校验 2字节 1字节 1字节 X字节 2字节 0xaa 0x55 X void USART6_Init (void) { GPIO_InitTypeDef GPIO_InitStructur
[单片机]
STM32直流电机启动(一)驱动电路的介绍
驱动电路 典型的H桥驱动电路如下: 要使电机旋转只需导通对角线上的两个三极管即可,如导通Q1,Q4,关闭Q2,Q4即可驱动电机正转; 若想电机反向转动,即导通三极管Q2,Q3,关闭Q1,Q4。 此时电路图可简化为如下所示: 但当我们直接导通一个半桥上的Q1,Q3(或Q2,Q4)时,电源被短接,由于三极管电阻很小,此时流过三极管的电流很大,非常容易烧坏三极管,因此实际运用中一定不能导通同一个半桥上的三极管。 但是在实际情况中,三极管导通/关闭和电路中的其它原件操作都存在一定延时的,因此不能简单的认为,只需要同时将Q1,Q4导通,Q2,Q3关闭即可驱动电机; 为避免上述情况的发生,一般有如下两种方式: 1.硬件上采
[单片机]
STM32学习记录之cubemx配置IIC+逻辑分析仪的学习
首先 这里用的开发板是原子的STM32F429,就是通过CUBEMX配置IIC的总线,话不多说,上图 因为原子429的板子的IIC的数据线和时钟线是PH4和PH5,而I2C2的默认并不是这个引脚,大家要根据手上实际的电路图来呀。 这些都是初始化配置,没有需要修改的,就这样默认就好了,至于系统时钟的配置,选用的是外部时钟,只要不超出范围就好了。然后就是生成工程。 下面是主要的程序 #define ADDR_AT24C02_Write 0xA0 #define ADDR_AT24C02_Read 0xA1 uint8_t I2C_Buffer_Write ; uint8_t I2C_Buffer_Read ;
[单片机]
<font color='red'>STM32</font>学习记录之cubemx配置IIC+逻辑分析仪的学习
STM32为例,介绍单片机中的BOR/POR/PDR
STM32内部自带了一个可编程电压检测器(PVD),对VDD的电压进行监控可以通过电源控制寄存器PLS 位来设置监控电压的阀值,这样通过与VDD电压比较达到了监控电压的目的。 电源控制状态寄存器(PWR_CSR)中的PVDO用来表明VDD是高于还是低于PVD的电压阀值。当VDD下降到PVD阀值以下或VDD上升到PVD阀值之上时,通过外部中断16线上升或下降边沿触发设置,产生PVD中断。在中断处理函数中做相应的保护措施。 具体由以下图片和表格所示。 图1:阀值与PVD输出关系 表:具体寄存器参数 下面对上面的图片和表格中的数据做一个简要的解释: (1) PVD = Programmable Votage Detec
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved