推荐阅读最新更新时间:2024-11-08 11:10
STM32单片机学习笔记(6):PWM波形产生
项目简介 利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第六部分针对STM32单片机内置TIM模块的PWM波形产生的学习和理解。 硬件模块 STM32F103R4 示波器 软件工具 CubMX Proteus KEIL 电路连接图 工作流程 首先,在CubMX种设置号一些参数,选择TIM1定时器,按下图设置好工作模式。输出PWM的引脚是PB15引脚。 然后再按下图设置好预分频和计数值 最好设置好占空比,占空比=Pulse/Per,比如想要设置占空比为20%,而上面设置了计数值为1000,那
[单片机]
stm32单片机GPIO端口的特点及应用解析
一、GPIO的综合描述 stm32每一个GPIO端口拥有2个32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2个32bits的数据寄存器(GPIOx_IDR,GPIOx_ODR),1个32bits的set/reset寄存器(GPIOx_BSRR),1个16bits的reset寄存器(GPIOx_BRR)和1个32bits的Lock寄存器(GPIOx_LCKR)。 (一)每一个IO引脚都可以使用软件配置为以下几种模式: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入 5. 开漏输出——(此模式可实现hotpower说的真双向IO) 6. 推挽输出 7. 复用功能的推挽
[单片机]
STM32系列里RTC的亚秒特性及功能(下)
我们回到前面提到的需求,每隔50±20ms做唤醒,即30ms~70ms范围内实现唤醒都可以接受。如果说使用ALARM中断,相信很多人自然会想到,先设定一个ALARM点,等唤醒后再修改新的ALARM值,就这样延续下去。 这样操作也是可以的,即每次在ALARM中断里修改新的ALARM时间点。下图是对ALARM值进行编程的流程【设置时先要关闭ALARM,修改ALARM值后再手动开启ALARM单元】: 不过,结合眼前的应用需求,我们可以不使用上面的做法,而是巧妙地使用RTC亚秒特性来实现周期性的ALARM以满足需求。怎么个巧法呢?一起来看看。 先假定RTCCLK为32768Hz,RTC同步分频系数和异步分频系数分别为如下参数:
[单片机]
STM32 μC/OS系统进睡眠模式的方法
前段时间做基于μC/OS系统的开发,遇到一个问题,在运行任务的时候需要使CPU进入睡眠状态几秒钟,但直接调用__WFI();时没有效果,后来查找资料发现需要在空闲任务中调用。 下面是我让cpu进入睡眠状态的例子: void App_TaskIdleHook (void) { //检查标志确定是否需要睡眠 if(Flag_Power_Off != 0) { //关闭systick避免systick中断唤醒CPU SYSTICK_Cmd(DISABLE); Flag_Power_Off = 0; printf( sleep\r\n ); CLKPWR_Sleep(); printf( wake\
[单片机]
STM32 定时器输出比较主动模式
STM32的定时器还可以工作在输出主动模式TIM_OCMode_Active。这里所谓的主动模式,通俗地说就是当定时器的计数值达到比较值的时候,强制在引脚端输出高电平。在这里,我这里编写一个程序使定时器工作输出比较主动模式,然后经过已经时间的延时,然后在通道引脚电平就会强制被拉高。 下面就讲讲相关的代码,还是基于我自己的规范工程。 1、工程的修改 1)这里用到了定时器,所以需要将stm32f10x_tim.h添加到STM32F10x_StdPeriod_Driver工程组中。 2)打开stm32f0x_conf.h文件,将其中原先被屏蔽的语句:#include stm32f10x_tim.h 的注释去掉。 3)新建OCAc
[单片机]
STM32进阶-DHT11传感器的应用详细步骤
DHT11概述 接口说明 电源引脚 DHT11的供电电压为 3-5.5V。传感器上电后,要等待 1s 以越过不稳定状态在此 期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。 DHT11数据处理 串行接口 (单线双向) DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次 通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数 部分用于以后扩展,现读出为零.操作流程如下: 一次完整的数据传输为40bit,高位先出。 数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据 +8bit校
[单片机]
如何使用STM32实现systick的精确延时
SYSTICK寄存器初始化 void SysTick_Configuration(void) { if (SysTick_Config(SystemCoreClock / 100)) { while (1); } NVIC_SetPriority(SysTick_IRQn, 0x0); } SysTick_Config默认时钟为SysTick_CLKSource_HCLK,所以在这之前使用SysTick_CLKSourceConfig()选择系统时钟不会改变systick的时钟 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks 》 Sys
[单片机]
STM32自定义printf实现多串口互用
STM32 串口使用频繁的朋友可能知道一个问题,库自带的 USART_SendData 函数一次只能发送 1 Byte 字符 如果我们要输出一个带格式、带参数的串口数据就只能通过 sprintf 打印到一个临时数组,然后再使用一个for循环调用USART_SendData一个字符一个字符的输出,过程非常麻烦! 姜斌是一个非常怕麻烦的人所以这种方法无疑让我发疯!后来在原子(OpenEDV)那里购买了开发板拿到了例程。里面重定向了printf函数作为串口输出函数,有了这个函数之后就能够很轻松的参数输出,但问题就在这里我们串口1 串口2 都要带参数输出怎么办? 本次实验:自定义printf函数 实验数据来源: 配置usart
[单片机]