嵌入式技术与应用开发-跑马灯控制设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n 又如:GPIOC.9引脚输出低电平的代码是: GPIO_ReSetBits (GPIOC, GPIO_Pin_9);
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 输入输出函数
5. GPIO_WriteBit ()和GPIO_Write ()函数
n 通过程序控制实现跑马灯效果设计与调试,跑马灯效果:
n 先一个一个点亮,直至全部点亮; n 然后一个一个熄灭; n 循环上述过程。
n 跑马灯电路设计
n 使用STM32F103R6芯片的PB0~PB9引脚分别接10个LED的阴极; n 与任务4的差别是使用了排阻和排型LED。
STM32
项目二 跑马灯控制设计与实现
STM32
项目二 跑马灯控制设计与实现
LED循环点亮控制设计
n LED循环点亮功能实现过程如下:
1. D1点亮:GPIOB口输出0x0feff,取反为0x0100,初始控制码为0x0100; 2. D2点亮:GPIOB口输出0x0fdff,取反为0x0200,控制码为0x0200; 3. D3点亮:GPIOB口输出0x0fbff,取反为0x0400,控制码为0x0400; 4. D4点亮:GPIOB口输出0x0f7ff,取反为0x0800,控制码为0x0600; 5. 重复第一步,这样就可以实现LED循环点亮。 n 从以上分析可以看出,只要将控制码从GPIOB口输出,就能点亮相应的
Thumb-2指令所处的状态。 ② Debug(调试)状态:处理器停止并进行调试,进入该状态。也就
是在调试时的状态。
STM32
项目二 跑马灯控制设计与实现
Cortex-M3的编程模式
n Cortex-M3寄存器组
n Cortex-M3拥有寄存器R0~R15以及一些特殊功能寄存器。其中
① R0~R12是通用寄存器,但是绝大多数的16位指令只能使用R0~R7 (低组寄存器),而32位的Thumb-2指令则可以访问所有通用寄 存器;
② R13作为堆栈指针SP。SP有两个,但在同一时刻只能有一个可以 看到;
③ 特殊功能寄存器有预定义的功能,而且必须通过专用的指令来访问。
n Cortex-M3寄存器部分对于以后的编程是非常重要的,有时需要 编程直接这些寄存器。
STM32
项目二 跑马灯控制设计与实现
任务5 跑马灯设计与实现
n 目标
n 是用来读取指定IO口16个引脚的输入值,也是读取IDR寄存器的值 n 例如:读取GPIOB口输入值的代码是:
temp = GPIO_ReadInputData(GPIOB);
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 输入输出函数
n 常用的IO端口寄存器有6个:CRL、CRH、IDR、ODR、BSRR 和BRR。
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 在前面,我们围绕STM32的IO端口寄存器如何使用,进行了详细 的介绍。现介绍一下IO口的操作步骤,步骤如下:
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
//PB9输出低电平,D2点亮
Delay(100);
……
n GPIO_Pin_x到底是什么呢?
STM32
Delay(100);
temp=temp<<1; //上一个控制码左移一位,获得下一个控制码
}
}。 n 从以上分析可以看出,只要将控制码从GPIOB口输出,就能点亮相应的LED。 n 下一个控制码如何从上一个控制码获得呢?其方法是把上一个控制码左移一位,即
可获得下一个控制码。
STM32
项目二 跑马灯控制设计与实现
1. RCC_APB2PeriphClockCmd()函数
n 是使能GPIOx对应的外设时钟 n 例如:使能GPIOB和GPIOC时钟
2. GPIO_Init()函数
n 是初始化(配置)GPIO的模式和速度,也就是设置相应GPIO的CRL和 CRH寄存器值
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
① GPIO_WriteBit ()函数是向指定IO口的引脚写0或者写1,也就是向寄 存器ODR相应位的写0或者写1
② GPIO_Write()函数是向指定IO口写数据,也就是是向寄存器ODR写数 据
n 例如:向PC8写1的代码是: GPIO_WriteBit(GPIOC, GPIO_Pin_8, 1);
任务5 跑马灯设计与实现
n 跑马灯电路
STM32
项目二 跑马灯控制设计与实现
任务5 跑马灯设计与实现
n 跑马灯实现分析
n LED一个一个点亮,直至全部点亮。其效果实现过程如下: ① LED1点亮:GPIOB口输出初始控制码0x0FFFE(1111111111111110B); ② LED1和LED2点亮:GPIOB口输出控制码0x0FFFC(1111111111111100B); ③ LED1、 LED2和 LED3点 亮 : GPIOB口 输 出 控 制 码 0x0FFF8(
1111111111111000B); ④ …… ⑤ 10个LED全部点亮:GPIOB口输出控制码0x0FC00(1111110000000000B)。 n 从以上分析可以看出,只要将控制码从GPIOB口输出,就可以点亮相应的LED。
和置0,那么就可使用GPIO_Pin_x,来实现LED循环点亮控制。
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
//PB8输出低电平,D1点亮
Delay(100);
STM32
项目二 跑马灯控制设计与实现
项目二 跑马灯控制设计与实现
任务4 LED循环点亮控制
n 目标
n 使用STM32F103R6芯片的PB8 、PB9、 PB10和 PB11引脚分 别接4个LED的阴极,通过程序控制4个LED循环点亮。
n 如何控制这些LED循环点亮,关键在于如何控制STM32的IO口输 出,这是迈向STM32的第一步。
n STM32的IO端口操作
n 输入输出函数
1. GPIO_ReadInputDataBit ()函数
n 是读取指定IO口的对应引脚值,也就是读取IDR寄存器的值 n 例如:读取GPIOA.6(既PA6)引脚值:
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6);
2. GPIO_ReadInputData ()函数
1. 调用RCC_APB2PeriphClockCmd()函数,使能IO口时钟; 2. 调用GPIO_Init()函数,初始化IO口参数; 3. 使用IO口操作方法,对IO口进行各种操作。
STM32
项目二 跑马灯控制设计与实现
STM32的Gຫໍສະໝຸດ BaiduIO初始化和输入输出库函数
n STM32的IO端口操作
n 初始化函数
项目二 跑马灯控制设计与实现
Cortex-M3的编程模式
n Cortex-M3工作模式及状态
1. Cortex-M3工作模式
n Cortex-M3处理器支持线程模式(Thread)和处理模式(Handler) 两种模式。
① 在 复 位 时 , 处 理 器 进 入 Thread模 式 , 在 从 异 常 返 回 时 也 进 入 Thread模 式 。 特 权 和 用 户 ( 非 特 权 ) 模 式 下 的 代 码 , 能 够 在 Thread模式下运行。
STM32
项目二 跑马灯控制设计与实现
LED循环点亮控制设计
n LED循环点亮功能实现分析
n 如何控制STM32F103R6芯片的PB8、PB9、PB10和PB11引脚的输出 电平,实现LED循环点亮呢?
n 由于LED是采用共阳极接法,这样就能通过引脚输出“0”和“1”来控制LED的 亮和灭。
n 例如: 在 GPIOB口 输 出 0x0feff( 1111111011111111B) , 使 PB8输 出 低 电 平 “0”,D1被点亮; 若GPIOB口输出0x0f7ff(1111011111111111B ),则PB11输出高电平 “1”,D4被点亮。
LED。下一个控制码如何从上一个控制码获得呢?其方法是把上一个控制 码左移一位,即可获得下一个控制码。
STM32
项目二 跑马灯控制设计与实现
LED循环点亮控制设计
n LED循环点亮控制代码如下:
while(1)
{
temp=0x0100;
//设置初始控制码
for(i=0;i<4;i++)
{
GPIO_Write(GPIOB,~temp); //向GPIOB口写点亮LED的控制码
3. GPIO_ReadOutputDataBit ()和GPIO_ReadOutputData ()函数
① GPIO_ReadOutputDataBit ()函数是读取指定IO口某个引脚的输出值, 也就是读取寄存器ODR相应位的值
② GPIO_ReadOutputData()函数是读取指定IO口16个引脚的输出值, 也就是读取寄存器ODR的值
STM32
项目二 跑马灯控制设计与实现
认识STM32的IO口
n STM32的IO端口寄存器
n STM32的每个IO端口都是由以下7个寄存器来控制
1. 配置模式的2个32位的端口配置寄存器CRL和CRH; 2. 2个32位的数据寄存器IDR和ODR; 3. 1个32位的置位/复位寄存器BSRR; 4. 1个16位的复位寄存器BRR; 5. 1个32位的锁存寄存器LCKR。
② 当系统产生异常时,处理器进入Handler模式。在Handler模式下 所有代码都必须是特权代码。
STM32
项目二 跑马灯控制设计与实现
Cortex-M3的编程模式
n Cortex-M3工作模式及状态
2. Cortex-M3工作状态
n Cortex-M3处理器可以在Thumb和Debug两种操作状态下工作。 ① Thumb状态:此状态是正常执行16位和32位半字对齐的Thumb和
n 又如:向GPIOC口写0x0FFFE的代码是: GPIO_Write(GPIOC, 0x0FFFE);
STM32
项目二 跑马灯控制设计与实现
LED循环点亮控制设计
n LED循环点亮控制电路设计
n 4个LED采用的是共阳极接法,其阴极分别接在STM32F103R6芯 片的PB8 、PB9、 PB10和 PB11引脚上。
【技能训练2-1】GPIO_SetBits ()和GPIO_ResetBits ()函数应用
n 试一试,如何使用GPIO_SetBits()和GPIO_ResetBits()函数,来实现
LED循环点亮控制设计与实现。
n GPIO_SetBits ()和GPIO_ResetBits ()函数可以对多个IO口同时进行置1
STM32
项目二 跑马灯控制设计与实现
认识STM32的IO口
n STM32的IO口可以由软件配置成8种模式
1. 浮空输入:IN_FLOATING; 2. 上拉输入:IPU; 3. 下拉输入:IPD; 4. 模拟输入:AIN; 5. 开漏输出:Out_OD; 6. 推挽输出:Out_PP; 7. 复用功能的推挽式输出:AF_PP; 8. 复用功能的开漏输出:AF_OD。
n 例如:读取GPIOE.5引脚输出值的代码是: GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5);
n 又如:读取GPIOE口所有引脚输出值的代码是: GPIO_ReadOutputData(GPIOE);
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 输入输出函数
4. GPIO_SetBits ()和GPIO_ResetBits ()函数
n GPIO_SetBits ()和GPIO_ResetBits ()是用来设置取指定IO口的引脚输 出高电平和低电平的,也就是设置寄存器BSRR、BRR的值
n 例如:GPIOC.8引脚输出高电平的代码是: GPIO_SetBits (GPIOC, GPIO_Pin_8);
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 输入输出函数
5. GPIO_WriteBit ()和GPIO_Write ()函数
n 通过程序控制实现跑马灯效果设计与调试,跑马灯效果:
n 先一个一个点亮,直至全部点亮; n 然后一个一个熄灭; n 循环上述过程。
n 跑马灯电路设计
n 使用STM32F103R6芯片的PB0~PB9引脚分别接10个LED的阴极; n 与任务4的差别是使用了排阻和排型LED。
STM32
项目二 跑马灯控制设计与实现
STM32
项目二 跑马灯控制设计与实现
LED循环点亮控制设计
n LED循环点亮功能实现过程如下:
1. D1点亮:GPIOB口输出0x0feff,取反为0x0100,初始控制码为0x0100; 2. D2点亮:GPIOB口输出0x0fdff,取反为0x0200,控制码为0x0200; 3. D3点亮:GPIOB口输出0x0fbff,取反为0x0400,控制码为0x0400; 4. D4点亮:GPIOB口输出0x0f7ff,取反为0x0800,控制码为0x0600; 5. 重复第一步,这样就可以实现LED循环点亮。 n 从以上分析可以看出,只要将控制码从GPIOB口输出,就能点亮相应的
Thumb-2指令所处的状态。 ② Debug(调试)状态:处理器停止并进行调试,进入该状态。也就
是在调试时的状态。
STM32
项目二 跑马灯控制设计与实现
Cortex-M3的编程模式
n Cortex-M3寄存器组
n Cortex-M3拥有寄存器R0~R15以及一些特殊功能寄存器。其中
① R0~R12是通用寄存器,但是绝大多数的16位指令只能使用R0~R7 (低组寄存器),而32位的Thumb-2指令则可以访问所有通用寄 存器;
② R13作为堆栈指针SP。SP有两个,但在同一时刻只能有一个可以 看到;
③ 特殊功能寄存器有预定义的功能,而且必须通过专用的指令来访问。
n Cortex-M3寄存器部分对于以后的编程是非常重要的,有时需要 编程直接这些寄存器。
STM32
项目二 跑马灯控制设计与实现
任务5 跑马灯设计与实现
n 目标
n 是用来读取指定IO口16个引脚的输入值,也是读取IDR寄存器的值 n 例如:读取GPIOB口输入值的代码是:
temp = GPIO_ReadInputData(GPIOB);
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 输入输出函数
n 常用的IO端口寄存器有6个:CRL、CRH、IDR、ODR、BSRR 和BRR。
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 在前面,我们围绕STM32的IO端口寄存器如何使用,进行了详细 的介绍。现介绍一下IO口的操作步骤,步骤如下:
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
//PB9输出低电平,D2点亮
Delay(100);
……
n GPIO_Pin_x到底是什么呢?
STM32
Delay(100);
temp=temp<<1; //上一个控制码左移一位,获得下一个控制码
}
}。 n 从以上分析可以看出,只要将控制码从GPIOB口输出,就能点亮相应的LED。 n 下一个控制码如何从上一个控制码获得呢?其方法是把上一个控制码左移一位,即
可获得下一个控制码。
STM32
项目二 跑马灯控制设计与实现
1. RCC_APB2PeriphClockCmd()函数
n 是使能GPIOx对应的外设时钟 n 例如:使能GPIOB和GPIOC时钟
2. GPIO_Init()函数
n 是初始化(配置)GPIO的模式和速度,也就是设置相应GPIO的CRL和 CRH寄存器值
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
① GPIO_WriteBit ()函数是向指定IO口的引脚写0或者写1,也就是向寄 存器ODR相应位的写0或者写1
② GPIO_Write()函数是向指定IO口写数据,也就是是向寄存器ODR写数 据
n 例如:向PC8写1的代码是: GPIO_WriteBit(GPIOC, GPIO_Pin_8, 1);
任务5 跑马灯设计与实现
n 跑马灯电路
STM32
项目二 跑马灯控制设计与实现
任务5 跑马灯设计与实现
n 跑马灯实现分析
n LED一个一个点亮,直至全部点亮。其效果实现过程如下: ① LED1点亮:GPIOB口输出初始控制码0x0FFFE(1111111111111110B); ② LED1和LED2点亮:GPIOB口输出控制码0x0FFFC(1111111111111100B); ③ LED1、 LED2和 LED3点 亮 : GPIOB口 输 出 控 制 码 0x0FFF8(
1111111111111000B); ④ …… ⑤ 10个LED全部点亮:GPIOB口输出控制码0x0FC00(1111110000000000B)。 n 从以上分析可以看出,只要将控制码从GPIOB口输出,就可以点亮相应的LED。
和置0,那么就可使用GPIO_Pin_x,来实现LED循环点亮控制。
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
//PB8输出低电平,D1点亮
Delay(100);
STM32
项目二 跑马灯控制设计与实现
项目二 跑马灯控制设计与实现
任务4 LED循环点亮控制
n 目标
n 使用STM32F103R6芯片的PB8 、PB9、 PB10和 PB11引脚分 别接4个LED的阴极,通过程序控制4个LED循环点亮。
n 如何控制这些LED循环点亮,关键在于如何控制STM32的IO口输 出,这是迈向STM32的第一步。
n STM32的IO端口操作
n 输入输出函数
1. GPIO_ReadInputDataBit ()函数
n 是读取指定IO口的对应引脚值,也就是读取IDR寄存器的值 n 例如:读取GPIOA.6(既PA6)引脚值:
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6);
2. GPIO_ReadInputData ()函数
1. 调用RCC_APB2PeriphClockCmd()函数,使能IO口时钟; 2. 调用GPIO_Init()函数,初始化IO口参数; 3. 使用IO口操作方法,对IO口进行各种操作。
STM32
项目二 跑马灯控制设计与实现
STM32的Gຫໍສະໝຸດ BaiduIO初始化和输入输出库函数
n STM32的IO端口操作
n 初始化函数
项目二 跑马灯控制设计与实现
Cortex-M3的编程模式
n Cortex-M3工作模式及状态
1. Cortex-M3工作模式
n Cortex-M3处理器支持线程模式(Thread)和处理模式(Handler) 两种模式。
① 在 复 位 时 , 处 理 器 进 入 Thread模 式 , 在 从 异 常 返 回 时 也 进 入 Thread模 式 。 特 权 和 用 户 ( 非 特 权 ) 模 式 下 的 代 码 , 能 够 在 Thread模式下运行。
STM32
项目二 跑马灯控制设计与实现
LED循环点亮控制设计
n LED循环点亮功能实现分析
n 如何控制STM32F103R6芯片的PB8、PB9、PB10和PB11引脚的输出 电平,实现LED循环点亮呢?
n 由于LED是采用共阳极接法,这样就能通过引脚输出“0”和“1”来控制LED的 亮和灭。
n 例如: 在 GPIOB口 输 出 0x0feff( 1111111011111111B) , 使 PB8输 出 低 电 平 “0”,D1被点亮; 若GPIOB口输出0x0f7ff(1111011111111111B ),则PB11输出高电平 “1”,D4被点亮。
LED。下一个控制码如何从上一个控制码获得呢?其方法是把上一个控制 码左移一位,即可获得下一个控制码。
STM32
项目二 跑马灯控制设计与实现
LED循环点亮控制设计
n LED循环点亮控制代码如下:
while(1)
{
temp=0x0100;
//设置初始控制码
for(i=0;i<4;i++)
{
GPIO_Write(GPIOB,~temp); //向GPIOB口写点亮LED的控制码
3. GPIO_ReadOutputDataBit ()和GPIO_ReadOutputData ()函数
① GPIO_ReadOutputDataBit ()函数是读取指定IO口某个引脚的输出值, 也就是读取寄存器ODR相应位的值
② GPIO_ReadOutputData()函数是读取指定IO口16个引脚的输出值, 也就是读取寄存器ODR的值
STM32
项目二 跑马灯控制设计与实现
认识STM32的IO口
n STM32的IO端口寄存器
n STM32的每个IO端口都是由以下7个寄存器来控制
1. 配置模式的2个32位的端口配置寄存器CRL和CRH; 2. 2个32位的数据寄存器IDR和ODR; 3. 1个32位的置位/复位寄存器BSRR; 4. 1个16位的复位寄存器BRR; 5. 1个32位的锁存寄存器LCKR。
② 当系统产生异常时,处理器进入Handler模式。在Handler模式下 所有代码都必须是特权代码。
STM32
项目二 跑马灯控制设计与实现
Cortex-M3的编程模式
n Cortex-M3工作模式及状态
2. Cortex-M3工作状态
n Cortex-M3处理器可以在Thumb和Debug两种操作状态下工作。 ① Thumb状态:此状态是正常执行16位和32位半字对齐的Thumb和
n 又如:向GPIOC口写0x0FFFE的代码是: GPIO_Write(GPIOC, 0x0FFFE);
STM32
项目二 跑马灯控制设计与实现
LED循环点亮控制设计
n LED循环点亮控制电路设计
n 4个LED采用的是共阳极接法,其阴极分别接在STM32F103R6芯 片的PB8 、PB9、 PB10和 PB11引脚上。
【技能训练2-1】GPIO_SetBits ()和GPIO_ResetBits ()函数应用
n 试一试,如何使用GPIO_SetBits()和GPIO_ResetBits()函数,来实现
LED循环点亮控制设计与实现。
n GPIO_SetBits ()和GPIO_ResetBits ()函数可以对多个IO口同时进行置1
STM32
项目二 跑马灯控制设计与实现
认识STM32的IO口
n STM32的IO口可以由软件配置成8种模式
1. 浮空输入:IN_FLOATING; 2. 上拉输入:IPU; 3. 下拉输入:IPD; 4. 模拟输入:AIN; 5. 开漏输出:Out_OD; 6. 推挽输出:Out_PP; 7. 复用功能的推挽式输出:AF_PP; 8. 复用功能的开漏输出:AF_OD。
n 例如:读取GPIOE.5引脚输出值的代码是: GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5);
n 又如:读取GPIOE口所有引脚输出值的代码是: GPIO_ReadOutputData(GPIOE);
STM32
项目二 跑马灯控制设计与实现
STM32的GPIO初始化和输入输出库函数
n STM32的IO端口操作
n 输入输出函数
4. GPIO_SetBits ()和GPIO_ResetBits ()函数
n GPIO_SetBits ()和GPIO_ResetBits ()是用来设置取指定IO口的引脚输 出高电平和低电平的,也就是设置寄存器BSRR、BRR的值
n 例如:GPIOC.8引脚输出高电平的代码是: GPIO_SetBits (GPIOC, GPIO_Pin_8);