stm32 pwm 呼吸灯

发布者:vettykatty最新更新时间:2019-04-10 来源: eefocus关键字:stm32  pwm  呼吸灯 手机看文章 扫描二维码
随时随地手机看文章

#include "main.h"

#include "stm32f0xx_hal.h"

 

/* USER CODE BEGIN Includes */

int i=0;

/* USER CODE END Includes */

 

/* Private variables ---------------------------------------------------------*/

TIM_HandleTypeDef htim3;

 

UART_HandleTypeDef huart1;

 

/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/

 

/* USER CODE END PV */

 

/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_USART1_UART_Init(void);

static void MX_TIM3_Init(void);                                    

void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);

                                

 

/* USER CODE BEGIN PFP */

/* Private function prototypes -----------------------------------------------*/

 

/* USER CODE END PFP */

 

/* USER CODE BEGIN 0 */

//Öжϴ¦Àí

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1|GPIO_PIN_2);

}

 

//¶¨Ê±Æ÷×ÔÔöº¯Êý

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

i++;

}

 

 

/* USER CODE END 0 */

 

/**

  * @brief  The application entry point.

  *

  * @retval None

  */

int main(void)

{

  /* USER CODE BEGIN 1 */

 

  /* USER CODE END 1 */

 

  /* MCU Configuration----------------------------------------------------------*/

 

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();

 

  /* USER CODE BEGIN Init */

 

  /* USER CODE END Init */

 

  /* Configure the system clock */

  SystemClock_Config();

 

  /* USER CODE BEGIN SysInit */

 

  /* USER CODE END SysInit */

 

  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_USART1_UART_Init();

  MX_TIM3_Init();

  /* USER CODE BEGIN 2 */

HAL_TIM_Base_Start_IT(&htim3);

HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);

  /* USER CODE END 2 */

 

  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

 

  /* USER CODE END WHILE */

 

  /* USER CODE BEGIN 3 */


/*uint8_t data = 0;

HAL_UART_Receive(&huart1, &data, 1, 0);


if(data == 'l')

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_RESET);

HAL_UART_Transmit(&huart1, &data, 1, 0);

}

else if(data == 'h')

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_SET);

HAL_UART_Transmit(&huart1, &data, 1, 0);

} */


int j;

for(j=100;j>=50;j--)

{

__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, j);

HAL_Delay(15);

}

for(j=50;j<=100;j++)

{

__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, j);

HAL_Delay(15);

}



  }

  /* USER CODE END 3 */

 

}

关键字:stm32  pwm  呼吸灯 引用地址:stm32 pwm 呼吸灯

上一篇:STM32总结一 STM32三种点亮LED灯方式的不同之处
下一篇:stm32 PUSH 按键控制LED闪烁

推荐阅读最新更新时间:2024-03-16 16:27

STM32局部变量的数组最大能到多少?
当在一个函数中声明一个较大的局部数组变量时,程序可以编译通过,但运行时,老是进入hardfaulthandler,导致出现改问题的原因可能是栈溢出。因为局部变量是存放在栈区的,而全局变量在全局区(静态区),如果栈区较小,会产生溢出。 解决这种问题的方法: 方法1:启动文件里面对栈的大小有固定的值。函数里面的数组是在调用该函数的时候,才给你分配空间。将启动文件下的堆栈改大 Stack_Size EQU 0x00000400 。 Stack Size,一般小工程0X400足够,大工程才设置0X1000就够用,所以默认无需设置太大。 方法2:用静态数组代替普通局部数组。 方法3:数组过大,栈溢出了,有可能覆盖了其他全局变量的值
[单片机]
STM32实例-步进电机的速度控制
项目需求 在制作一个使用全向轮的机器人底盘,对于全向轮,电机的精度是影响效果的重要因素。所以使用了步进电机,使用步进电机的优点是可以不使用编码器,开环控制即可达到高精度的效果。 调整占空比或者调整周期 众所周知,PWM有两个重要参数,周期与占空比。 步进电机的运动方式是,每收到一个脉冲,就旋转指定的角度。因此影响电机速度的唯一参数就是PWM的频率。以下附图两张来说明调整占空比与调整周期的区别。 周期固定,调整占空比 上图中有4个PWM,它们的周期是一样的,不同之处是拥有从80%至20%的占空比。可以看出,无论占空比为多少,在1s内,它们产生的高电平的数量是一样的,即无论占空比为多少,PWM的频率都一致。因此也就无法调整
[单片机]
STM32学习笔记----内存管理
1.简介 内存管理: 指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 内存管理的实现方法有很多种,最终都是要实现两个函数: malloc 和 free。 malloc :函数用于内存申请; free: 函数用于内存释放。 1.1 分块式内存管理原理 由上图可知,分块式内存管理由内存池和内存管理表两部分组成。内存池被等分为 n块,对应的内存管理表,大小也为 n,内存管理表的每一个项对应内存池的一块内存。 内存管理表的项值代表的意义:当该项值为 0 的时候,代表对应的内存块未被占用;当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代
[单片机]
<font color='red'>STM32</font>学习笔记----内存管理
STM32 HAL的超全知识总结
ST 为开发者提供了非常方便的开发库:有标准外设库(SPL库)、HAL 库(Hardware Abstraction Layer,硬件抽象层库)、LL 库(Low-Layer,底层库)三种。前者是ST的老库已经停更了,后两者是ST现在主推的开发库。 相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。 通过文字描述可以知道HAL库的几
[单片机]
51单片机软件产生PWM驱动直流电机,频率占空比可调
做了一个实例,以前都是用AVR直接硬件生成PWM,方便快捷,几条语句的问题,驱动能力还强,从来没仔细想过如何用51单片机软件方法做一个,现在非要用51单片机做,那就直接开始制作,首先硬件焊接,软件编程,只说程序部分,程序采用占空比可调,频率可调的思路,需要用到2个定时器,1个定时器输出占空比信号数据,另个定时器标定频率,具体的程序稍后放出,其实也不太难,问题1:如何做到定时器内的软件时间低于定时器定时中断时间 ,频率低无所谓,频率要是到了20khz,这个问题就有些困难,有些if语句进入循环后可以到20ms,这个问题解决采用51单片机特有的中断嵌套解决。 问题2 :如何做到外部中断、定时器0、定时器1中断优先级分级?解决方法就是分别在
[单片机]
51单片机软件产生<font color='red'>PWM</font>驱动直流电机,频率占空比可调
【STM库应用】stm32 之 IIC应用
iic协议是比较简单的双线协议,时钟线CLK和数据线SDA。 一般我们常见的还有spi总线,这种总线可以可以根据需要扩展,还有单总线等等 这次还以at240c2为例进行操作! PS:这就是传说中的iic时序图 硬件构造我们不过多的分析,今天用到库了!我们先从库函数硬件iic初始化说起! PB6 -- CLK PB7 -- SDA void i2c_init(u8 addr,u32 clock) { I2C_InitTypeDef i2c; RCC- APB2ENR |= 1 3; GPIOB- CRL |= (u32)0xff (6*4); RCC_APB1PeriphClockCm
[单片机]
【STM库应用】<font color='red'>stm32</font> 之 IIC应用
嵌入式系统学习——STM32之按键输入
之前写了两篇关于STM32 GPIO的介绍和运用,跑马灯用到了GPIO的推挽输出,但是对于输入还是没有用到,这次就运用一下GPIO的上拉输入。实验还是和以前51做的实验一样,就是判断按键的输入,然后控制LED灯。这次没有直接配置寄存器,而是调用库函数和位操作结合。 注:每一块开发板对应电路都不相同,编写代码需要对应自己的板子,本人两个LED灯对应的GPIO为:GPIOD13和GPIOD14,并且是共阴极。两个按键对应的GPIO为:GPIOC13和GPIOE0,并且共阴极。 首先,LED初始化和上一篇博客中的跑马灯初始化一样,只需拷贝就可以了。 LED初始化函数: #include sys.h
[单片机]
嵌入式系统学习——<font color='red'>STM32</font>之按键输入
STM32系统中如何数据掉电保护
在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2C的24C02等等)往往会造成额外的PCB空间增大,硬件成本增加,降低产品的性价比。如果单从实用性来讲,在stm32的系统中,诸如此类的应用,笔者推荐如下2个方法可以去尝试和借鉴。 基于备份寄存器 原理:对于大容量的MCU系列来说,它有着42个16bit的备份寄存器,而中小容量的微处理器却只有10个16bit的备份寄存器。以STM32F103C8T6为例,42个备份寄存器的地址偏移为:0x04~0x28,0x40~0xBC,共可以存储84个byte数据。备份寄存器是依赖者备份电源的,当外界的VDD掉
[单片机]
<font color='red'>STM32</font>系统中如何数据掉电保护
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved