前言
下面以STM32F103C8T6举例,其实STM32F10X系列的其他芯片也兼容。当然我讲的是标准库。
1.STM32F103C8T6芯片一共有几种GPIO口模式,分别是什么?
8种GPIO模式
输出4种:复用推挽输出、通用推挽输出、复用开漏输出、通用开漏输出
输入4种:模拟输入、浮空输入、上拉输入、下拉输入
以下为STM32F10X系列标准库的GPIO模式定义结构体。
typedef enum
{ GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
2.STM32F103C8T6标准库配置,GPIO_Init里有成员,GPIO_Speed代表什么?
这个成员变量只有输出配置的时候有作用,代表管脚输出高低电平的极限翻转频率。
个人理解是,在使用读取数据比较快的从机设备时,单片机的GPIO输出高低电平的翻转速度可能根不上从机的读取速度,就需要用到这里的配置。
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
3.STM32F103C8T6的浮空输入和上拉输入、下拉输入有什么区别?在什么场景下应用?
上拉输入:相当于浮空输入+一个芯片内部自带的上拉电阻。默认情况下输入高电平。
下拉输入:相当于浮空输入+一个芯片内部自带的下拉电阻。默认情况下输入低电平。
浮空输入:输入的高低电平不确定,在悬空状态下容易受到干扰。
除了模拟ADC、DAC用模拟输入外,其余的都选用浮空和上下拉输入。具体如何使用,购买的传感器或从机设备的手册会给出详细建议的。
对了,这里为什么DAC要使用模拟输入呢?我觉得可能是使用了逐次逼近型的DAC,在DAC的内部使用到了ADC来比较,所以这里配置模拟输入。因为在GPIO口输出的同时应该是可以输入的。
4.谈谈你对中断向量表的理解
中断向量表相当于一个一维指针数组,存储着各种中断处理函数的地址,用于中断处理函数的跳转,通常存储在存储器的开始位置。
中断函数需要重写,当一个中断发生时,CPU会自动从中断向量表中找到对应中断的地址,跳转到中断函数里执行。
5.STM32中NVIC的作用
NVIC又叫嵌套向量中断控制器,是CPU内部专门管理中断的一块核内外设,在用到了多个中断时,一定要配置NVIC,设置终端的优先执行次序,另外如果要STM32某一个片上外设支持中断,一定要对该外设做对应的配置。
6.中断中抢占优先级和响应优先级有什么区别
抢占优先级能够实现中断嵌套,优先级高的中断可以嵌套打断优先级低的中断。
响应优先级,当抢占优先级相同时,优先排队。
区别在哪呢,大白话来说就比如抢占优先级是一个人在看病,现在有个ICU的,肯定是要急救,打断所有人的中断,而响应优先级好比是一个人是医院的SVIP,他不能打断已经看病的人,但是可以插队到最前面看病。当然,只是希望大家理解这个概念,医院SVIP和插队行为纯属虚构。
7.STM32F103C8T6系列芯片定时器有哪些?通常用于什么场合?
系统滴答定时器、看门狗定时器、基本定时器、通用定时器、高级定时器
系统滴答定时器:是一个24位倒计数定时计数器,主要用于操作系统时间片,用来写比较准确的延时函数,for循环写出来的延时函数需要考虑函数跳转,变量定义,变量加减,条件判断等因素带来的开销,所以用系统滴答定时器写延时函数比较准确。
看门狗定时器:独立看门狗和窗口看门狗,只要用于程序因为各种原因跑飞,或者异常执行,使程序复位或立刻停止操作。
基本定时器:TIM6、TIM7,拥有定时中断、主模式触发DAC的功能。
通用定时器:TIM2、TIM3、TIM4、TIM5,拥有基本定时器全部功能,额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能。
高级定时器:TIM1、TIM8,拥有通用定时器全部功能,额外具有重复计数器、死区生成、互补输出、刹车输入等功能
8.STM32F103C8T6通用定时器,可以输出PWM信号,请谈谈PSC ARR CNT CRRx是任何影响PWM生成的?
时钟线上拿到的信号时钟信号,经过PSC进行预分频,分频之后的时钟用于计数
ARR里装计数的目标值,CNT是计数器的值,当CNT的值等于ARR值,就产生一次更新事件,一次更新时间长度的倒数就是一个PWM频率
CCRx里面是PWM波进行高低电平切换的比较值
PSR、ARR决定一个PWM的周期
CCRx影响占空比
注:如果需要学习详细的,可以评论区留言,博主跟着江科大学习的,可以给你发笔记,也可以告诉你江科大的链接。
9.STM32F103C8T6一共有几个普通定时器,分别挂在哪一条时钟线上?
一共8个,就是前面提到的基本定时器、通用定时器、高级定时器
TIM1、TIM8挂在APB2上,其他的挂在APB1上。
10.谈谈ADC
STM32F103C8T6一共有3个ADC,是12位精度的
ADC的通道之间采集还有一定的互相影响,不能用于高精度采集场合,如果希望尽可能提高采集的稳定性和精度,在多通道同时采集的时候,选用通道数有一定的间隔。