软件:
STM32CubeMX V4.25.0
keil_u5
固件库版本:
STM32Cube FW_F1 V1.6.1
硬件:
OneNet 麒麟座V1.4
在STM32CubeMX中新建项目,选择正确的MCU型号
首先设置RCC和SYS,如下图
启用TIM1,选择内部时钟源(Internal Clock)。
然后根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),如下图
GPIO设置 PC7和 PC10为GPIO_OUTPUT, (这是麒麟座V1.4的四个LED管脚其中的两个)
设置其中一个默认为高电平,另一个默认为低电平,User Label分别是LED1和LED4。
设置TIM1,启用中断
由于TIM1是挂在APB2总线上(如何判断当前计时器在哪个总线,文章最后会描述方法),查看时钟树我们知道APB2当前频率为72MHz,我们希望每秒钟发生2次中断,就把预分频系数设置为36000-1,自动重载值为1000-1,得到的计时器更新中断频率即为72,000,000/36000/1000=2Hz。此时定时为0.5秒,若要实现定时1秒,则将1000改为2000
点击任务栏的生成代码图标
8、生成工程,并添加相关程序;
首先,main.c程序中添加(放置于定时器配置之后)开启 TIM1计时中断;
/* USER CODE BEGIN 2 */
/*使能定时器1中断*/
HAL_TIM_Base_Start_IT(&htim1);
/* USER CODE END 2 */
其次,在 tim.c文件中添加定时器中断完成回调函数;
/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
if (htim->Instance == TIM1){
/* Toggle LED */
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
}
}
/* USER CODE END 1 */
关键字:STM32cubeMX stm32 定时器 LED闪烁
引用地址:
STM32cubeMX 基于stm32的定时器实现定时1秒LED闪烁
推荐阅读最新更新时间:2024-11-12 09:09
STM32学习记录14 ucosii中的串口中断
先看邵老师的书中怎么写 里面写到: C/OS中,中断服务子程序要用汇编语言来写。然而,如果用户使用的C语言编译器支持在线汇编语言的话,用户可以直接将中断服务子程序代码放在C语言的程序文件中。 再看《M3权威指南》2.11.2节与9.11节中讲到Cortex-M3在进入异常时自动压栈。。。。返回时自动出栈,再也不需要汇编语言编写了。也就是说我们可以使用C语言来编写中断服务程序。并且省去了上面程序清单的(1)(5)(6). 其实ucos中的终端和裸奔的中断写法基本一致,只是加了几条语句,如下为串口中断的写法: void USART1_IRQHandler(void) { uint8_t RxData; O
[单片机]
STM32 GPIO寄存器ODR BSRR BRR
使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态。 比如希望快速地对GPIOE的位7进行翻转,则可以: GPIOE- BSRR = 0x80; // 置'1' GPIOE- BRR = 0x80; // 置'0' 如果使用常规'读-改-写'的方法: GPIOE- ODR = GPIOE- ODR | 0x80; // 置'1' GPIOE- ODR = GPIOE- ODR & 0xFF7F; // 置'0' 有人问是否BSRR的高16位是多余的,请看下面这个例子: 假如你想在一个操作中对GPIOE的位
[单片机]
linux下编写I2C驱动与stm32通信(二)
接上一篇,linux下GPIO模拟I2C驱动完成后,就是stm32的i2c配置了,由于hi3518e作为i2c的主设备,stm32则作为从设备,由于GPIO模拟i2c的从时序比模拟主时序要麻烦很多,所以采用stm32的硬件I2C。(stm32官网i2c例程主模式会莫名的卡死,从模式比较好用) 下载官网例程,将之设置为从模式,使用i2c2,将SCL,SDA,GND与hi3518e板子上GPIO模拟的SCL,SDA和GND连起来,写一个测试例程来验证双方的通信。 首先在linux下加载驱动,然后调用打开驱动,调用编写的驱动接口函数,读数据和写数据。驱动接口代码如下: #include stdio.h #include
[单片机]
STM32简易交通灯设计(定时可调)
//按键key1 设置红灯时间 按键key2 设置绿灯时间 按键key3 设置黄灯时间 #include stm32f10x_lib.h #include sys.h #include delay.h #include usart.h #include stdlib.h static int G=0,R=0,Y=0; //设置绿,红,黄灯时间变量 #include lcd.h #include key.h #include time.h //----------- 按键函数---------- void scan_key1() { static u8 i,j; if(
[单片机]
STM32学习笔记 — 之GPIO端口篇
最近刚开始学习STM32,所以从最基本的GPIO开始学起;首先看看STM32的datasheet上对GPIO口的简单介绍: 每个GPI/O 端口有两个32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32 位置位/复位寄存器(GPIOx_BSRR),一个16 位复位寄存器(GPIOx_BRR)和一个32 位锁定寄存器(GPIOx_LCKR)。 GPIO 端口的每个位可以由软件分别配置成多种模式。每个I/O 端口位可以自由编程,然而I/0 端口寄存器必须按32 位字被访问(不允许半字或字节访问)。GPIOx_BSRR 和GPIOx_BRR 寄存器允许对
[单片机]
在使用STM32的FSMC的一些体会。。
刚开始接触感觉似乎很难,真的是云里雾里。但是看了百度百科FMSC介绍以及芯嵌stm32入门视频《基于stm32的FSMC控制LCD的理解》视频终于对FMSC有自己的理解。虽然还有些细节还没有完全吃透,但是学东西就是需要在摸索中前进,停下来就是浪费时间。然后马上拿起板子,下载SRAM的例程运行。好正常运行。下面我们来看看相关的代码吧。 /*神舟SRAM读写程序相关定义*/ #define BUFFER_SIZE 0x400 /*定义读写BUFFER大小*/ #define WRITE_READ_ADDR 0x8000 /*定义SRAM读写的地址*/ ErrorStatus HSEStartUpSt
[单片机]
基于STM32的LED点阵屏的设计与实现
简介:近年来,随着信息产业的高速发展,点阵LED 显示屏已广泛应用于金融行业、邮电行业、体育馆、广告业等各种广告发布和信息显示系统,成为信息传送的重要手段。本文介绍的LED 书写点阵屏,不但可以像普通显示屏一样作为信息输出设备,而且可以通过光笔直接在LED 显示屏上进行信息输入,普通的显示屏也具有 手写 的功能了。 1 硬件系统设计 本系统总体框图如图1 所示,由键盘与显示模块、光笔模块、LED 点阵屏模块、STM32控制模块、电源模块五部分组成。 图1 总体方案方框图 1. 1 核心控制模块 本系统以STM32F103VCT6 为控制核心。 STM32是32 位微处理器,具有低功耗,中断延迟小,高性能等特
[单片机]
STM32让printf通过串口打印及自定义printf函数
在嵌入式系统中,通过串口打印log是非常重要的调试手段,但是直接调用底层驱动打印信息非常不方便,在c语言中一般使用printf打印基本的显示信息,而默认printf的结果不会通过串口发送,所以需要对printf的输出进行重定向。 有时候需要同时从多个串口输出信息,如果仍然想通过printf函数输出信息,就需要自己写printf的实现。 一. 初始化端口和配置 对串口用到的GPIO进行配置,并对串口的参数进行初始化。 二. 宏定义并实现具体的发送函数 代码在编译时首先判断__GNUC__有无定义,之后将PUTCHAR_PROTOTYPE替换成具体的定义。在keil5中,使用fputc函数,所以其实
[单片机]