完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小编在野火上学习完用固件库点亮一个LED灯后,自己编程做了一个LED流水灯。在这里分享给大家。
用proteus8.7做的仿真图: 固件库编程的方式,源码如下: bps_LED_LS.h //用于声明全局变量,定义宏,声明全局变量 #ifndef _BSP_LED_H #define _BSP_LED_H #include “stm32f10x.h” extern uint16_t LED_G_GPIO_PIN; //声明全局变量,定义引脚, extern GPIO_InitTypeDef GPIO_InitStruct; //声明全局变量,寄存器B的结构体 #define LED_G_GPIO_PORT GPIOB //宏定义端口,便于移植 #define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB //宏定义时钟使能 //函数声明 void LED_GPIO_Config(void); #endif /*_BSP_LED_H*/ bps_LED_LS.c //点亮一个LED灯的封装驱动函数文件 #include “bsp_LED_LS.h” void LED_GPIO_Config(void){ //初始化GPIO(一个完整的初始化函数) RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE); //开时钟,来自“stm32f10x_rcc.h” GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN; //选择引脚(LED_G_GPIO_PIN为引脚变量) GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //选择推挽输出“GPIO_Mode_Out_PP”来自stm32f10x_gpio.h的模式的枚举 GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz; //选择推挽输出“GPIO_Speed_50MHz”来自stm32f10x_gpio.h的速率的枚举 GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct); //&是取地址的意思,因为GPIO_InitStruct是一个结构体的变量 } main.c //主函数文件 #include “stm32f10x.h” #include “bsp_LED_LS.h” GPIO_InitTypeDef GPIO_InitStruct; //全局变量,寄存器B的结构体 uint16_t LED_G_GPIO_PIN=0x0001; //全局变量,定义引脚,设定一个引脚初值 void Delay(uint32_t count){ //延时函数 for(;count!=0;count--); } int main(void){ while(1){ LED_GPIO_Config(); //调用GPIO初始化函数,完成时钟的设置、引脚的选择、端口的输入输出模式和速率等的配置 GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); //GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),一会儿灯又亮了(清零函数) Delay(0xFFFFF); GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); //GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),一会儿灯灭掉了(置位函数) Delay(0xFFFFF); LED_G_GPIO_PIN =LED_G_GPIO_PIN《《1; if(LED_G_GPIO_PIN==0x0008){ //循环,将灯点亮的范围控制在PB0-PB2 LED_G_GPIO_PIN = 0x0001; } } } 仿真结果图: 三个LED依次循环点亮。 注意建立工程时选取的芯片与仿真时的芯片一致,proteus8.7中stm32的芯片类型很少,所以建立工程时需要注意。 简单的学习分享,希望对大家有所帮助!!! |
|
|
|
小编在野火上学习完用固件库点亮一个LED灯后,自己编程做了一个LED流水灯。在这里分享给大家。
用proteus8.7做的仿真图: 固件库编程的方式,源码如下: bps_LED_LS.h //用于声明全局变量,定义宏,声明全局变量 #ifndef _BSP_LED_H #define _BSP_LED_H #include “stm32f10x.h” extern uint16_t LED_G_GPIO_PIN; //声明全局变量,定义引脚, extern GPIO_InitTypeDef GPIO_InitStruct; //声明全局变量,寄存器B的结构体 #define LED_G_GPIO_PORT GPIOB //宏定义端口,便于移植 #define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB //宏定义时钟使能 //函数声明 void LED_GPIO_Config(void); #endif /*_BSP_LED_H*/ bps_LED_LS.c //点亮一个LED灯的封装驱动函数文件 #include “bsp_LED_LS.h” void LED_GPIO_Config(void){ //初始化GPIO(一个完整的初始化函数) RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE); //开时钟,来自“stm32f10x_rcc.h” GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN; //选择引脚(LED_G_GPIO_PIN为引脚变量) GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //选择推挽输出“GPIO_Mode_Out_PP”来自stm32f10x_gpio.h的模式的枚举 GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz; //选择推挽输出“GPIO_Speed_50MHz”来自stm32f10x_gpio.h的速率的枚举 GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct); //&是取地址的意思,因为GPIO_InitStruct是一个结构体的变量 } main.c //主函数文件 #include “stm32f10x.h” #include “bsp_LED_LS.h” GPIO_InitTypeDef GPIO_InitStruct; //全局变量,寄存器B的结构体 uint16_t LED_G_GPIO_PIN=0x0001; //全局变量,定义引脚,设定一个引脚初值 void Delay(uint32_t count){ //延时函数 for(;count!=0;count--); } int main(void){ while(1){ LED_GPIO_Config(); //调用GPIO初始化函数,完成时钟的设置、引脚的选择、端口的输入输出模式和速率等的配置 GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); //GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),一会儿灯又亮了(清零函数) Delay(0xFFFFF); GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); //GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),一会儿灯灭掉了(置位函数) Delay(0xFFFFF); LED_G_GPIO_PIN =LED_G_GPIO_PIN《《1; if(LED_G_GPIO_PIN==0x0008){ //循环,将灯点亮的范围控制在PB0-PB2 LED_G_GPIO_PIN = 0x0001; } } } 仿真结果图: 三个LED依次循环点亮。 注意建立工程时选取的芯片与仿真时的芯片一致,proteus8.7中stm32的芯片类型很少,所以建立工程时需要注意。 简单的学习分享,希望对大家有所帮助!!! |
|
|
|
小编在野火上学习完用固件库点亮一个LED灯后,自己编程做了一个LED流水灯。在这里分享给大家。
用proteus8.7做的仿真图: 固件库编程的方式,源码如下: bps_LED_LS.h //用于声明全局变量,定义宏,声明全局变量 #ifndef _BSP_LED_H #define _BSP_LED_H #include “stm32f10x.h” extern uint16_t LED_G_GPIO_PIN; //声明全局变量,定义引脚, extern GPIO_InitTypeDef GPIO_InitStruct; //声明全局变量,寄存器B的结构体 #define LED_G_GPIO_PORT GPIOB //宏定义端口,便于移植 #define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB //宏定义时钟使能 //函数声明 void LED_GPIO_Config(void); #endif /*_BSP_LED_H*/ bps_LED_LS.c //点亮一个LED灯的封装驱动函数文件 #include “bsp_LED_LS.h” void LED_GPIO_Config(void){ //初始化GPIO(一个完整的初始化函数) RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE); //开时钟,来自“stm32f10x_rcc.h” GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN; //选择引脚(LED_G_GPIO_PIN为引脚变量) GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //选择推挽输出“GPIO_Mode_Out_PP”来自stm32f10x_gpio.h的模式的枚举 GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz; //选择推挽输出“GPIO_Speed_50MHz”来自stm32f10x_gpio.h的速率的枚举 GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct); //&是取地址的意思,因为GPIO_InitStruct是一个结构体的变量 } main.c //主函数文件 #include “stm32f10x.h” #include “bsp_LED_LS.h” GPIO_InitTypeDef GPIO_InitStruct; //全局变量,寄存器B的结构体 uint16_t LED_G_GPIO_PIN=0x0001; //全局变量,定义引脚,设定一个引脚初值 void Delay(uint32_t count){ //延时函数 for(;count!=0;count--); } int main(void){ while(1){ LED_GPIO_Config(); //调用GPIO初始化函数,完成时钟的设置、引脚的选择、端口的输入输出模式和速率等的配置 GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); //GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),一会儿灯又亮了(清零函数) Delay(0xFFFFF); GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); //GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),一会儿灯灭掉了(置位函数) Delay(0xFFFFF); LED_G_GPIO_PIN =LED_G_GPIO_PIN《《1; if(LED_G_GPIO_PIN==0x0008){ //循环,将灯点亮的范围控制在PB0-PB2 LED_G_GPIO_PIN = 0x0001; } } } 仿真结果图: 三个LED依次循环点亮。 注意建立工程时选取的芯片与仿真时的芯片一致,proteus8.7中stm32的芯片类型很少,所以建立工程时需要注意。 简单的学习分享,希望对大家有所帮助!!! |
|
|
|
只有小组成员才能发言,加入小组>>
2516 浏览 0 评论
1096浏览 2评论
707浏览 1评论
459浏览 0评论
200浏览 0评论
342浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 23:08 , Processed in 1.451934 second(s), Total 85, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号