EDN首页   博客首页

4

关于投票
在STM32中如何配置片内外设使用的IO端口

首先,一个外设经过配置输入的时钟和初始化后即被激活(开启)。

如果需要使用该外设的输入输出管脚,则需要配置相应的GPIO端口;否则该外设对应的输入输出管脚可以做普通GPIO管脚使用。


STM32的输入输出管脚有下面8种可能的配置:
  1. 浮空输入
  2. 带上拉输入
  3. 带下拉输入
  4. 模拟输入
  5. 开漏输出
  6. 推挽输出
  7. 复用功能的推挽输出
  8. 复用功能的开漏输出

对应到外设的输入输出功能有下述三种情况:
一、外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出复用功能的开漏输出
二、外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入带上拉输入带下拉输入
三、ADC对应的管脚:配置管脚为模拟输入


这一点在手册中没有十分明确地说明,我们已经要求写手册的人在下一版本的手册中加入。

系统分类: 单片机
用户分类: 产品特性
标签: STM32 GPIO 外设管脚
来源: 原创
发表评论 阅读全文(242) | 回复(0)

2

关于投票
STM32 GPIO端口的输入电平说明

STM32的I/O管脚有两种:TTL和CMOS,所有管脚都兼容TTL和CMOS电平。

也就是说,从输入识别电压上看,所有管脚(不管是TTL管脚还是CMOS管脚)都可以识别TTL或CMOS电平。

下面是摘自STM32数据手册的有关数据:

 Symbol  Parameter  Conditions  Min  Typ  Max  Unit
 VIL Input low level voltage  TTL Ports  -0.5    0.8  V
 VIH Standard IO input high level voltage  2    VDD+0.5
IO FT input high level voltage  2    5.5V
 VIL Input low level voltage  CMOS Ports  -0.5    0.35VDD  V
 VIH Input high level voltage  0.65VDD    VDD+0.5

系统分类: 单片机
用户分类: 产品特性
标签: STM32 GPIO 输入电平
来源: 原创
发表评论 阅读全文(215) | 回复(0)

7

关于投票
STM32(Cortex-M3)中的优先级概念
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:

所有8位用于指定响应优先级
最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

这就是优先级分组的概念。


Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:

第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级

可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:

NVIC_PriorityGroup_0 => 选择第0组
NVIC_PriorityGroup_1 => 选择第1组
NVIC_PriorityGroup_2 => 选择第2组
NVIC_PriorityGroup_3 => 选择第3组
NVIC_PriorityGroup_4 => 选择第4组

接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级:

// 选择使用优先级分组第1组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
// 使能EXTI0中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
 
// 使能EXTI9_5中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);




要注意的几点是:

1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;

2)抢占式优先级别相同的中断源之间没有嵌套关系;

3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。
系统分类: 单片机
用户分类: 产品特性
标签: STM32 Cortex-M3 NVIC 库函数
来源: 原创
发表评论 阅读全文(598) | 回复(4)

2

关于投票
关于IO用作复用功能时的时钟设置注意要点

近来碰到很多客户在使用STM32的外设时,由于IO口被用作复用功能,但是外设的初始化正确,GPIO口初始化正确,外设的时钟也已开启,但是外设无法正常运行。

其中最关键的一项,大多数使用者多没有设置,就是某个IO口被用作外设的接口时,需要开启IO口的复用功能的时钟,即进行外设、IO的时钟使能时,需要如下代码

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx | RCC_APB2Periph_AFIO, ENABLE);    /* GPIOx and AFIO clock enable */
x --- 为对应的GPIO口,如:A、B、C、D、E。

希望用户在使用时,注意该要点!

系统分类: 单片机
用户分类: 产品特性
标签: STM32 复用功能 时钟 GPIO
来源: 原创
发表评论 阅读全文(189) | 回复(0)

2

关于投票
如何使用STM32的窗口看门狗
STM32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种情况之一时产生看门狗复位:
1)当计数器的数值从0x40减到0x3F时
2)当刷新看门狗时计数器的数值大于某一设定数值时,此设定数值在WWDG_CFR寄存器定义

对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况。
系统分类: 单片机
用户分类: 产品特性
标签: STM32 看门狗 窗口看门狗
来源: 原创
发表评论 阅读全文(141) | 回复(0)

2

关于投票
STM32的UART支持格式解读
STM32的UART是8或9位,支持以下格式:
 数据位数   奇偶检验  停止位
7 奇或偶 0.5、1、1.5、2
8 无检验 0.5、1、1.5、2
8 奇或偶 1
9 无检验 1

UART4、UART5不支持0.5和1.5位的停止位。
系统分类: 单片机
用户分类: 产品特性
标签: STM32 UART数据格式
来源: 原创
发表评论 阅读全文(335) | 回复(2)

2

关于投票
STM32的ADC精度说明

以下所有的说明来源于《STM32F103xx数据手册》(2008年5月 第7版)。这里没有新的信息,只是把数据手册中的相应部分翻译了一下。


在阅读这个数据手册中各个参数时,首先必须搞清楚这些参数是如何得到的。根据手册中5.1.1节和5.1.2节的说明,有些参数是在一定条件下在生产线上测试得到,有些则是根据样本测试后推算得出。下面这段话是5.1.1节和5.1.2节的译文摘录:

5.1.1 最小和最大数值
除非特别说明,在生产线上通过对100%的产品在环境温度TA=25℃和TA=TAmax下执行的测试(TAmax与选定的温度范围匹配),所有最小和最大值将在最差的环境温度、供电电压和时钟频率条件下得到保证。

在每个表格下方的注解中说明为通过推算、设计模拟和/或工艺特性得到的数据,不会在生产线上进行测试;在推算的基础上,最小和最大数值是通过样本测试后,取其平均值再加减三倍的标准分布(平均±3∑)得到。

5.1.2 典型数值
除非特别说明,典型数据是基于TA=25℃和VDD=3.3V(2V ≤ VDD ≤ 3.3V电压范围)。这些数据仅用于指导设计而未经测试。

典型的ADC精度数值是通过对一个标准的批次采样,在所有温度范围下测试得到,95%的产品误差小于等于给出的数值(平均±2∑)。


再看下面两张表,在25℃且VDDA = 3V~3.6V时,典型误差可达±1.3LSB,最大可达±2LSB;在所有温度范围内且VDDA=2.4V~3.6V时,典型误差可达±2LSB,最大可达±5LSB。

点击看大图

关于ET、EO、EG、ED、EL的意义和关系见下图(此图是手册中的图29):

点击看大图

系统分类: 单片机
用户分类: 产品特性
标签: STM32 ADC特性 解读
来源: 原创
发表评论 阅读全文(294) | 回复(0)

2

关于投票
STM32F103——充满想象力的芯片

本文链接:http://user.qzone.qq.com/53023365/blog/1206706967

STM32F103——充满想象力的芯片

1、ARM最新的Cortex-M3内核。优先级抢占的中断控制器,支持中断自动嵌套,硬件完成现场保护与恢复,中断嵌套时,只需保护和恢复一次现场,即使在恢复现场的时候再次中断也不需要再次保护现场,只需6个clk的调整时间。
2、居然只需7个滤波电容就能构成最小系统
3、外设的引脚居然可以重影射
4、RAM居然可以通过位绑定技术按位来访问
5、居然装备了可编程的掉电监测器
6、居然有带电池供电的数据备份寄存器
7、芯片进入低功耗模式后可以通过“事件”唤醒,而无须执行中断子程序
8、定时器居然有前置的倍频器
9、2个12位的AD却拥有高达1M的采样速率,AD模式更是天花乱坠,传说中的注入模式……
10、GPIO刷新速率可设定,支持位的原子操作,还能锁定方向,居然还有个脚叫“入侵检测引脚”,发生“入侵”时硬件自动记录时间,只要有后备电池。为西门子保留了单脉冲的输出功能(据说用于PLC的)……
11、原来还有一种狗叫模拟看门狗……
12、可检测PWM脉宽和频率(硬件直接支持)
13、集成电机控制和霍尔接口
14、原来还有一种狗叫窗口看门狗……过早或过晚喂狗,狗都会让系统复位
15、还集成了第三只狗,独立看门狗,这种狗比较常见
16、SPI还带硬件的CRC校验高达18Mb/s的通讯速度
17、支持两个设备地址的I2C总线,据说任天堂的游戏机常用到这种功能,I2C同时支持SMBUS2.0和PMBUS模式
18、USART速度高达4.5Mbps,不仅支持IrDA还与接触式的IC卡协议兼容
19、还有CAN,USB……
20、只要十几块钱
21、……
至今还没搞清到底有多少功能

STM32:Releasing your creativity!

系统分类: 单片机
用户分类: 产品特性
标签: STM32 ARM 单片机
来源: 转贴
发表评论 阅读全文(454) | 回复(1)
总共 , 当前 /