cortex_m3_stm32嵌入式学习笔记(一):建立工程模板+跑马灯实验

搞了一晚上+一上午 终于算是入门了 刚刚把LED点亮。。真是费劲啊

吐槽MDK对库函数的封装性。。太扯了 。。所有的固件库函数都要自己手动添加到工程里面去。。还好建好一个模板之后就不用动了(以后直接复制就行了)

首先对于工程模板里的东西,我们要搞明白哪些是需要我们自己去编写的,而哪些是不用动的, 其实初学者应该只需要编写两个文件夹里面的程序:1 USER 文件夹下的主函数

2. HARDWARE (硬件) 里面的硬件设置函数

至于建工程模板我就不赘述了,照着视频或课本建一个备份以后用就可以了

然后就是如何点亮LED并让它交替闪烁了

还是要看一下原理图

可以从开发板上看到两个LED灯分别写了 DS0,DS1 即对应的是LED0 LED1 ,LED0 对应stm32芯片上的PA8 LED1对应stm32芯片上的PD2

接下来写配置 IO的函数

#include "led.h"
void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_ist;
	//配置LED0
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE); //使能PA,PD端口时钟
	GPIO_ist.GPIO_Pin=GPIO_Pin_8;//LED0-->PA.8 端口配置
	GPIO_ist.GPIO_Mode=GPIO_Mode_Out_PP; //选择推挽输出模式
	GPIO_ist.GPIO_Speed=GPIO_Speed_50MHz;//IO的速度设为50MHz
	GPIO_Init(GPIOA,&GPIO_ist);//¸根据参数初始化GPIOA.8
	GPIO_SetBits(GPIOA,GPIO_Pin_8);//将PA.8设置为输出高

	//配置LED1
	GPIO_ist.GPIO_Pin=GPIO_Pin_2; //LED1-->PD.2 端口配置
	GPIO_Init(GPIOD,&GPIO_ist);//¸根据参数初始化GPIOD.2
	GPIO_SetBits(GPIOD,GPIO_Pin_2); //将PD.2设置为输出高
}

调好GPIO_InitTypeDef结构体中的3个成员,传参进去设置好初始化函数,看这条语句 GPIO_SetBits(GPIOA,GPIO_Pin_8);//将PA.8设置为输出高

再找到上图DS0 DS1  ,这条语句的作用就是将这两个口的电平初始化为1,(就是说灯最开始是不亮的)

然后看到 #include "led.h"

这个头文件是需要自己写的。。

#ifndef _LED_H
#define _LED_H
#include "sys.h"
#define LED0 PAout(8) //PA 8
#define LED1 PDout(2) //PD 2
void LED_Init(void);
#endif

上述代码用到了条件编译,不难。。了解一下就行了 作用是使得在主函数中可以识别LED0 LED1 LED_Init()。。其实就是声明一堆东西

把上面两个文件添加工程中 HARDWARE 文件中,注意要添加"led.h" 的路径

最后写主函数就简单了

#include "led.h"
#include "sys.h"
#include "delay.h"
int main(void)
{
	delay_init();
	LED_Init();
	while(1)
	{
		LED0=0;
		LED1=1;
		delay_ms(600);
		LED0=1;
		LED1=0;
		delay_ms(600);
	}
}

"delay.h" 里面主要是延时函数

时间: 2024-07-30 07:28:36

cortex_m3_stm32嵌入式学习笔记(一):建立工程模板+跑马灯实验的相关文章

cortex_m3_stm32嵌入式学习笔记(三):串口实验(串口通信)

串口,可以理解为是用来和上位机(比如电脑)对话的,本节实验实现的是stm32接收上位机发送过来的信息,在原原本本的返回过去 stm32有5路串口,本节学习的是其中之一的USB串口(USART1)和学习IO口一样,首先要配置串口,由于原子已经配好了写在sys文件里,本渣就本着不造轮子的理念(其实是太难不懂orz),先跳过去了.. 所以本工程只需要一个main函数即可 #include "led.h" #include "sys.h" #include "de

cortex_m3_stm32嵌入式学习笔记(十一):TFTLCD显示(初涉显示器)

本章我们将介绍 ALIENTEK 2.8 寸 TFT LCD 模块,该模块采用 TFTLCD 面板,可以显示 16 位色的真彩图片. TFT-LCD 即薄膜晶体管液晶显示器.其英文全称为: Thin Film Transistor-Liquid CrystalDisplay. TFT-LCD 与无源 TN-LCD. STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管( TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质

cortex_m3_stm32嵌入式学习笔记(五):独立看门狗实验(IWDG)

单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生.看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) . 感觉是是自动复位功能,就是在一定时间内你应该去喂它而如果程序中途进入了死循环(就是喂不了了)这个MCU就挂了..但如果没开IWDG ,你不知道它挂没挂(虽然个人认为也是可以手动按复位键的嘛..)(上面那段话抄自某论坛) IWDG初始化步骤: 1)取消寄存器写保

cortex_m3_stm32嵌入式学习笔记(十四):RTC实时时钟(秒中断)

STM32 的实时时钟( RTC)是一个独立的定时器. STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能.修改计数器的值可以重新设置系统当前的时间和日期. 由于时钟只需要配置一次,下次开机不需要重新配置(开发板有电池的情况下),所以需要用到备份区域(BKP)来标记是否配置过时钟 简单介绍BKP:备份寄存器是 42 个 16 位的寄存器( Mini 开发板就是大容量的),可用来存储 84 个字节的用户应用程序数据.他们处在备份域里, 当 VDD 电源被切

cortex_m3_stm32嵌入式学习笔记(四):外部中断实验

本章学习将STM32的IO口作为外部中断输入(实现和按键扫描一样的功能) STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处. STM32F103 的中断控制器支持 19 个外部中断/事件请求.每个中断设有状位,每个中断/事件都有独立的触发和屏蔽设置. STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.(本章只学习这一种) 线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB

cortex_m3_stm32嵌入式学习笔记(八):定时器中断实验

STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器. 本节学习通用定时器 TIM3 STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等. STM3 的通用 TIMx (TIM2. TIM3. TIM4 和 TIM5)定时器功能包括: 1)16 位向上.向下.向上/向下自动装载计数器( TIMx_CNT). 2)16 位可

cortex_m3_stm32嵌入式学习笔记(十九):DMA实验(高速传输)

DMA,全称为: Direct Memory Access,即直接存储器访问. DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路, 能使 CPU 的效率大为提高. 即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU. 一个完整的DMA传输过程必须经过下面的4个步骤. 1.DMA请求 CPU对DMA控制器初始化,并向I/O接

cortex_m3_stm32嵌入式学习笔记(十六):ADC实验(模数转换)

之前没学过数模电,对A/D D/A转换一窍不通,也百度了很多资料大都深奥难懂..算了,先自以为是一下吧,等以后学了专业课再说..(寒假回家一定要学..恩 就这么决定了)看了那么多资料,感觉 A/D转换就是将电压(或者是其他模拟量:如 压力,图像等)转换为数字,D/A就是反过来,而ADC就是A/D转换器,他可以采集外部电压转化为数字.本节实验通过ADC采集外部电压转换为数字显示在屏幕上. STM32 拥有 1~3 个 ADC( STM32F101/102 系列只有 1 个 ADC),这些 ADC

cortex_m3_stm32嵌入式学习笔记(二十一):SPI实验(通信总线)

SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口.是 Motorola首先在其 MC68HCXX 系列处理器上定义的. SPI 接口主要应用在 EEPROM, FLASH,实时时钟, AD 转换器,还有数字信号处理器和数字信号解码器之间. SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信