![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
32单片机学习
文章平均质量分 85
爱学C语音的猫
在校大学生,完成作业发布作品
展开
-
32单片机基础:输入捕获测频率
在PWM模块中,执行的逻辑是,初始化TIM2的通道1,产生一个PWM波形,输出引脚是PA0,通过SetCompare1的函数,可以调节CCR1寄存器的值,从而控制PWM的占空比。分别读取四个通道的CCR,这四个函数和上面的SetCompare1,2,3,4是对应的,读写的都是CCR寄存器,输出比较模式下,CCR是只写的,要用SetCompare写入,输入捕获模式下,CCR是只读的,要用GetCapture读出,第五步:选择从模式的触发源,触发源选择为TI1FP1,这里调用一个库函数,给一个参数就OK了。原创 2024-03-07 12:35:29 · 862 阅读 · 0 评论 -
32单片机基础:TIM输入捕获
这样与测周法的操作步骤是一样的,上升沿用于触发输入捕获,CNT用于计数计时,每来一个上升沿,取一下CNT的值,自动存在CCR里,CCR捕获得到的值,就是计数值N,CNT的驱动时钟,就是fc,fc/N就得到了待测信号的频率,另外还有个细节问题,就是每次捕获之后,我们都要把CNT清零一下,这样下次上升沿再捕获时,取出的CNT才是两个上升沿的时间间隔。触发源,就是选择从模式的触发信号源的,触发源选择,选择指定的一个信号,得到TRGI,TRGI去触发从模式,从模式可以选择一项操作来自动执行。这就与中界频率有关了。原创 2024-03-05 16:29:50 · 981 阅读 · 0 评论 -
32单片机基础:PWM驱动舵机,直流电机
接线图如上图所示。注意,舵机的5V 线不能接到面包板上的正极,面包板上的正极只有3.3V,是STM32提供的,所以要接到STLINK的5V,我们如何驱动舵机呢?由之前我们介绍原理知道,要输出如下图对应的PWM波形才行,只要你的波形能按照这个规定,准确的输出,就能驱动。原创 2024-03-03 18:44:10 · 1268 阅读 · 0 评论 -
PWM驱动呼吸灯
这些其他外设也是同理,比如我们要是有SPI的MISO引脚,那就是PA6,如果要I2C2的SCL引脚,那就是PB10,这个关系是定死的,不能任意更改。这些函数就是用来单独设置输出比较的极性的,带个N的就是高级定时器里的互补通道的配置,OC4没有互补通道,所以没有OC4N的函数,那这里可以设置极性,在结构体初始化的那个函数也可以设置极性,这两个设置极性的作用是一样的,结构体初始化只不过是用结构体一起初始化的,而在这里是一个单独的函数进行修改的,一般来说,结构体里的参数,都会有一个单独的函数可以进行修改的。原创 2024-03-03 13:39:30 · 1396 阅读 · 0 评论 -
32单片机基础:TIM输出比较
为了理解方便,置有效电平就是置高电平,置无效电平就是置低电平这三个模式都是当CNT与CRR值相等时,执行操作,这些模式就可以用做波形输出了,比如相等时电平翻转这个模式,这个可以方便的输出一个频率可调,占空比始终为50%的PWM波形,比如你设置CCR为0时,那当CNT每次清零时,就会产生一次CNT =CCR的事件,这就会导致输出电平翻转一次,每更新两次,输出为一个周期。LED不会立马熄灭,而是有一定的惯性,过一段时间才会熄灭,电机也是,当电机断电时,电机的转动不会立马停止,而是有一定的惯性,过一会才停。原创 2024-02-29 13:45:47 · 1092 阅读 · 0 评论 -
32单片机基础:定时器定时中断&定时器外部时钟
第一步:RCC开启时钟,这个基本上没=每个代码都是第一步,在这里打开时钟后,定时器的基准时钟和整个外设的工作时钟就会同时打开了。下图是定时器框架的所有结构,我们只需要把这里面的每个模块都打通,就可以让定时器工作了,第三步:配置时基单元,包括预分频器,自动重装器,计数模式等,这些参数用结构体配置。第五步:配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级。第二步:选择时基单元的时钟源,对于定时中断,我们就选择内部时钟源。当计数器使能后,计数器开始计数了,当计数器更新时,触发中断。原创 2024-02-29 00:55:00 · 1252 阅读 · 0 评论 -
32单片机基础:TIM定时中断
定时器就是一个计数器,当这个计数器的输入是一个准确可靠的基准时钟的时候,那它在这个基准时钟进行计数的过程,实际上就是计时的过程。比如在STM32中,定时器的基准时钟一般是主频72MHz,如果我对72MHz计72个数,那就是1MHz也就是1us的时间,如果计72000个数,那就是1KHz也就是1ms的时间。计数器就是用来执行计数定时的一个寄存器,每来一个时钟,计数器加1,预分频器,可以对计数器的时钟进行分频,让这个计数更加灵活。自动重装寄存器就是计数的目标值,就是我们想要计多少个时钟申请中断。原创 2024-02-27 00:22:01 · 1336 阅读 · 0 评论 -
32单片机基础:旋转编码器计次
如果把一相的下降沿用作触发中断,在中断时刻读取另一相的电平,正转时B就是高电平,反转是B就是低电平,这样就能区别旋转方向了。只不过这样在操作上有一些小瑕疵,比如你正转的时候,由于A相先出现下降沿,所以你刚开始动,就进中断了,而反转时是A相后出现下降沿,所以就是你转到位了,才进行中断。所以打算A,B都触发中断,只有在B相下降沿和A相低电平时,才判断为正转,在A相下降沿和B相为低电平时,才判断为反转。这样保证正转和反转都转到位了,才执行数字加减的操作,同时可以演示两个初始化代码。原创 2024-02-25 00:44:45 · 707 阅读 · 0 评论 -
32单片机基础:对射式红外传感器计次
接线如下图:在HardWare建立两个文件:如图如何配置外部中断,根据下面图,我们需要把外部中断从GPIO到NVIC这一路出现的外设模块都配置好。把这条信号打通就OK了。1.配置RCC:把我们这里涉及的外设时钟都打开,不打开时钟,外设是没法工作的2.配置GPIO,选择我们的端口为输入模式3.配置AFIO,选择我们用的这一路的GPIO,连接到后面的EXTI4.配置EXTI,选择边沿触发方式,比如上升沿,下降沿,或者双边沿,选择触发响应方式,可以选择中断响应和事件响应,原创 2024-02-24 23:37:23 · 1612 阅读 · 0 评论 -
32单片机基础:EXTI外部中断
触发信号通过或门后,就兵分两路,上一路是触发中断的,下一路是触发事件的,触发中断会置一个挂起寄存器,这相当于是一个中断标志位,我们可以读取这个寄存器判断是哪一个通道触发的中断如果挂起寄存器置1,它就继续往左走,和中断屏蔽寄存器共同进入一个与门,然后至NVIC中断控制器,这里的与门实际就是开关的作用,因为1与上任意的数x,等于这个任意的数x,0与上任意的数x,都等于0.这就相当于,中断屏蔽器给1,另一个输入就是直接输出,也就是允许中断。画一个斜线写在20,表示的是,就是20根线,代表20个通道。原创 2024-02-24 12:09:25 · 1560 阅读 · 0 评论 -
32单片机基础:OLED调试工具的使用
根据上述接线图,PB6,PB7为0或1,因为OLED要接0和1, 正好影响到了,不过这个也是没关系的,我们直接不初始化这两个引脚就行了,如果STM32的引脚上电后,如果不初始化,默认是浮空输入模式。这里存的是OLED的字库数据,因为OLED显示屏是不带字库的,想要显示字符图形还要先定义字符的点阵数据,下面就是这些字符的点阵数据,也就是字库。比如让你学习C语言,但是不允许使用printf这个打印函数,那你想一下,C语言是不是根本没法学,同样,给你一个单片机,但是没有任何显示参数的东西,那你也没法学单片机。原创 2024-02-21 19:13:10 · 2091 阅读 · 0 评论 -
32单片机基础:GPIO输入
两种方式,我们一般用下接的方式。第一个图:注意点。当按键按下,PA0接地,被置为低电平, 但是一旦按键松手,PA0悬空,引脚电压不确定。所以无论怎么读引脚也不知道知否被按下,所以为了解决这个问题,所以必须要求PA0是上拉输入的模式,这样引脚悬空的话,就会被置为高电平,这样我们我们就可以读取PA0的电压就知道按键是否被按下。但是第二个图就不会出现问题,按下时,被置为低电平,松手,由于上拉电阻的作用,被置为高电平。这样引脚就不会出现浮空状态。所以此时PA0可以配置浮空输入和上拉输入。原创 2024-02-21 17:12:29 · 2411 阅读 · 0 评论 -
32单片机基础:GPIO输出
下面都是理论知识,可以稍微看一看,GPIO的基本结构:GPIO位结构:电路图说明:保护二极管:IO 引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于 VDD 时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输原创 2024-02-20 23:44:56 · 1664 阅读 · 0 评论 -
STM32入门教程:新建工程
可以看出这种方式需要不断查手册来了解每一个寄存器的每一位是用来干啥的,而且这个操作方式也有一个弊端,就是我们除了PC13之外的位都配置了0,这样就会影响到其他端口的原有配置,如果我们要做到只配置PC13而不影响其他位,需要&=和|=的操作,所以寄存器的操作方式,代码简单,不太方便操作。STM32的开发方式有:基于寄存器的方式,基于标准库也就是库函数的方式,基于HAL库的方式,基于寄存器的方式与使用51单片机一样,是程序直接配置寄存器。下面工程就是建好了,但是这里工程文件空空如也,这个工程还是不能直接用的。原创 2024-02-20 02:58:41 · 704 阅读 · 0 评论