stm32

stm32f10x.h包括stm32f10x_conf.h,conf.h又包括所有库函数。

1.GPIO配置

使能时钟,图中使能APB2外设时钟,选择具体使能的外设和是否启用。

GPIO_Init函数配置GPIO口,首先定义GPIO_InitTypeDef类型的结构体GPIO_InitStructure,然后用.引出结构体的参数。配置完成在GPIO_Init函数第二个空填入结构体地址,第一个空为需要配置的GPIO口。

GPIO_SetBits将GPIO口置高电平,GPIO_ResetBits将GPIO口置低电平。

GPIO_WriteBit可以选择置高或者低电平。

2.硬件配置

创建.c和.h文件,.c文件中包含stm32f10x.h头文件,.h文件中添加如下定义,文件名为LED。

        2.1按键

GPIO_ReadInputDataBit(GPIO B,GPIO_Pin 1),读取PB1端口的值(输入寄存器某一位的值)

前两张图为key.c中代码

下张图同理检测PB11

下图为main.c中代码 ,实现常亮

 下图,实现交替闪烁

2.外部中断

中断基本原理

 在stm32中NVIC用于统一分配中断优先级和管理中断。

优先级分为抢占优先级和相应优先级,抢占优先级高的就可以进行中断嵌套,而响应优先级需要先等上一个中断结束再进行本中断。

下图中数值越小,优先级越高,其中总共四位的切分由我们自己选择。

        2.1 EXTI中断

上升沿指低电平变成高电平的瞬间,软件触发指软件中的一段代码。

相同pin不能触发指PA1和PB1和PC1不能同时触发中断。

通道数中后四个通道是额外附加,比如RTC设置一个闹钟后进入停止模式,闹钟响恢复,也是用中断实现,了解即可。

中断响应就是申请中断,cpu执行中断函数。事件响应即触发中断时触发一个事件,外部中断信号不通向CPU,而是通向其它外设,触发其它外设操作,例如触发DMA、ADC转换等。

外部中断5-9触发同一个中断函数,10-15触发同一个中断函数,通过标志位区分是哪一个中断。

 下图解释为什么PA1和PB1和PC1不能同时触发中断。

额外的,按键不要用外部中断读取,不好处理它的抖动,可以在主程序中循环读取或者使用使用定时器。

单片机的外设在接收数据时,如串口接收到数据、定时器时间到会置标志位,而标志位存储在寄存器中,下图中的函数应该是摄像头中使用到的读取标志位函数,其中获取中断标志位是否为1意思是指情况比较紧急时获取中断中的标志位信息。

建议主程序中用上面两个,中断程序里用下面两个

PS:NVIC优先级分组要保证整个工程统一,可以放在主函数开始,如果放在每个模块里,需要保证每个模块统一。

下图用上图第三个函数读取中断标志位,判断是否置1,如果置1了则执行中断函数,并且在中断函数最后要清除中断标志位,否则会一直中断。

2.2 TIM定时器中断

定时器部分原理不太懂,多看几遍,下图为框架图,初始化配置按照先配置时基单元再配置NVIC

预分频器,自动重装器,计数器。

下两张图为完整的Timer_Init函数

 定时一秒即1HZ,可以赋值ARR(自动重装值)=10000,PSC(预分频值)=7200,即为上图中对应的两个参数,-1是因为预分频器和计数器都有1个数的偏差。预分频值是提前对定时器进行分配,自动重装值是计数器数到这么多数中断一次,上面代码意思为计时数10000个数计时1s然后归零再数10000个数计时1s。

定时器初始化后,当定时器产生中断时,TIM4_IRQHandler会被自动执行。

PS(跨文件变量使用方法):如果需要在中断函数中使用Num变量,可以用extern声明变量,在main.c中定义uint8_t Num,在TIM.c中的中断函数使用则需要在其中声明extern uint8_t Num,意思就是调用文件中声明的变量Num,至于变量在哪定义就需要程序自己寻找,最后可以在main.c中找到。

                                                第二种方法就是将中断函数放到主函数中。

2.3输出比较功能(PWM)

输出比较就是用来输出PWM波型的,而PWM如何控制LED灯的亮灭呢?LED灯只有亮和灭两种状态,但是用PWM波型使其一段时间亮、一段时间灭,只要速度够快,就可以呈现一个中等亮度并且平缓。

一段PWM脉冲可以等效成图中紫色虚线的波型,相应的,PWM频率越大,模拟效果越好,同时性能开销也越大。

占空比100%即为高电平,0%即为低电平。若总共电压为5V,则20%占空比等效于1V,50%占空比等效于2.5V

有效电平即置高电平,无效电平即置低电平。

此图可以接上面定时器中断基本结构图 ,有效电平即置高电平,无效电平即置低电平。 CCR为红线,CNT为蓝线,CCR设置的高一些占空比就会变大,低一些占空比变小,后面箭头上的REF即为一个频率可调,占空比也可调的PWM波型,最终通向GPIO口。

PS:下图为重映射讲解,如果同时需要用红圈两个功能,但都是PA2,就可以使用重映射定义到PB10。

 计算ARR PSC CCR的值,并且在代码中赋值,赋值参数在PWM.c中。

算出结果ARR=100-1,CCR=50,PSC=720。

同一个定时器可以用不同通道输出同一个PWM波型,可以驱动多个电机。

2.3.1 舵机

舵机将PWM当成一个通信协议,而不是模拟信号,相对于的占空比舵机固定在不同角度。

根据上图脉冲宽度计算相应PSC,ARR,CRR的值

2.3.2 电机

下图为电机驱动模块,当IN1低电平,IN2高电平,电机反转,其中PWM高电平是反转,低电平制动,如果PWM频率够快就会根据占空比匀速反转。正转同理。

下图为接线图。

2.4定时器输入捕获功能

主要实现硬件全自动测量,减少软件资源占用。

如上图所示,测频法适合测量高频信号,结果更新慢,若闸门取1s则1s更新一次,相当于是均值滤波,取1s内频率的平均值,值比较平滑。

测周法适合测量低频信号,结果更新速度取决于待测信号,更新快,并且容易受噪声影响。

将测频法和测周法的N次提出来并相等,把fx解出,即得到中界频率fm,小于中介频率,测频法好,大于中介频率,测周法更好。

上图为主从触发模式(自己编的名词),主模式指将定时器内部信号映射到TRGO引脚,用于触发别的信号。

从模式指接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制。

触发源选择指选择从模式的触发信号源。

上图为输入捕获流程图,边沿信号来临时,TI1FP1检测到上升沿,往右经过分频器后,CNT计数器的值被转运到CCR1比较器中,然后也会触发上面的触发源选择,通过从模式触发CNT清零。

此处计数值就是上图频率测量中的N,计数器频率为fc,然后fc/N就是输入信号频率,CCR1比较器中总是最新;一个周期的计数值

上图pwmi模式中,使用两个比较器进行捕获,TI1FP1配置成上升沿触发,正常捕获周期,TI1FP2配置成下降沿触发,捕获一个高电平的CNT数值,存在CCR2中。然后TI1FP1触发时再对CNT进行清零,这样CCR2中的N的值比上CCR1中的N的值就是占空比。

TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI;    //交叉通道输入,可以把一个引脚的输入同时映射到两个捕获单元,也可以把两个引脚输入映射到一个捕获单元。

上图是TIM定时器通道映射关系。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值