GPIOtoLEDC语言之点灯之再封装-创新互联

gpio.h

新河ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
1 #ifndef __GPIO_H__                                                                 
  2 #define __GPIO_H__                                                                 
  3                                                                                    
  4                                                                                    
  5 #define RCC_MP_AHB4ENSETR (*(volatile unsigned int*)0x50000A28)//volatile 修饰     
  6 #define GPIOE ((gpio_config_t*)0x50006000)//做成指针方便函数传递参数               
  7 #define GPIOF ((gpio_config_t*)0x50007000)                                         
  8                                                                                    
  9 #define GPIO_PIN_0 0                                                               
 10 #define GPIO_PIN_1 1                                                               
 11 #define GPIO_PIN_2 2                                                               
 12 #define GPIO_PIN_3 3                                                               
 13 #define GPIO_PIN_4 4                                                               
 14 #define GPIO_PIN_5 5                                                               
 15 #define GPIO_PIN_6 6                                                               
 16 #define GPIO_PIN_7 7                                                               
 17 #define GPIO_PIN_8 8                                                               
 18 #define GPIO_PIN_9 9                                                               
 19 #define GPIO_PIN_10 10                                                             
 20 #define GPIO_PIN_11 11                                                             
 21 #define GPIO_PIN_12 12                                                             
 22 #define GPIO_PIN_13 13                                                             
 23 #define GPIO_PIN_14 14                                                             
 24 #define GPIO_PIN_15 15                                                             
 25                                                                                    
 26 typedef struct  //方便给具体的gpio寄存器修改数值,首先有                           
 27 //一个一组寄存器的首地址,把地址的转成该形式后,解引用访问成员就是访问对应寄存器    
 28 {                                                                                  
 29     volatile unsigned int moder;//volatile 修饰                                    
 30     volatile unsigned int otyper;                                                  
 31     volatile unsigned int ospeedr;                                                 
 32     volatile unsigned int pupdr;                                                   
 33     volatile unsigned int idr;                                                     
 34     volatile unsigned int odr;                                                     
 35 }gpio_config_t;                                                                    
 36                                                                                    
 37 //下面封装枚举方便函数传参时理解参数                                               
 38 typedef enum                                                                       
 39 {                                                                                  
 40     GPIO_INPUT = 0,                                                                
 41     GPIO_OUTPUT,                                                                   
 42     GPIO_AF,                                                                       
 43     GPIO_ANALOG,                                                                   
 44 }gpio_mode;                                                                        
 45                                                                                    
 46 typedef enum                                                                       
 47 {                                                                                  
 48     GPIO_PP = 0,                                                                   
 49     GPIO_OD,                                                                       
 50 }gpio_output_type;                                                                 
 51                                                                                    
 52 typedef enum                                                                       
 53 {                                                                                  
 54     GPIO_LOW = 0,                                                                  
 55     GPIO_MEDIUM,                                                                   
 56     GPIO_HIGH,                                                                     
 57     GPIO_VERY_HIGH,                                                                
 58 }gpio_output_speed;                                                                
 59                                                                                    
 60 typedef enum                                                                       
 61 {                                                                                  
 62     GPIO_NO_PULL = 0,                                                              
 63     GPIO_PULL_UP,                                                                  
 64     GPIO_PULL_DOWN,                                                                
 65 }gpio_pupd;                                                                        
 66                                                                                    
 67 typedef enum                                                                       
 68 {                                                                                  
 69     GPIO_RESET = 0,                                                                
 70     GPIO_SET,                                                                      
 71 }gpio_state;                                                                       
 72                                                                                    
 73 typedef struct                                                                     
 74 {                                                                                  
 75     gpio_mode mode;                                                                
 76     gpio_output_type type;                                                         
 77     gpio_output_speed speed;                                                       
 78     gpio_pupd pupd;                                                                
 79 }gpio_init;                                                                        
 80 //1.需要初始化哪一组的GPIO端口,                                                   
 81 //2.具体哪一个引脚                                                                 
 82 //3.传一些引脚要设置成的模式速度等等,可以封装成结构体,并传指针                   
 83 void hal_gpio_init(gpio_config_t *GPIOx , unsigned int pin , gpio_init *init);     
 84                                                                                    
 85 //1.需要写入哪一组的GPIO端口                                                       
 86 //2.具体哪一个引脚                                                                 
 87 //3.需要写入的是什么数据                                                           
 88 void hal_gpio_write(gpio_config_t *GPIOx , unsigned int pin , gpio_state state);   
 89 #endif                                                                             
 90                                                                                   

gpio.c 

1 #include "../include/gpio.h"                                                           
  2                                                                                        
  3                                                                                        
  4 //1.需要初始化哪一组的GPIO端口,                                                       
  5 //2.具体哪一个引脚                                                                     
  6 //3.传一些引脚要设置成的模式速度等等,可以封装成结构体,并传指针                       
  7 void hal_gpio_init(gpio_config_t *GPIOx , unsigned int pin , gpio_init *init)          
  8 {                                                                                      
  9     GPIOx->moder &= ~(0x3<<(pin*2));                                                  
 10     GPIOx->moder |= (init->mode<<(pin*2));                                            
 11                                                                                        
 12     GPIOx->otyper &= ~(0x1<otyper |= (init->type<ospeedr &= ~(0x3<<(pin*2));                                                
 16     GPIOx->ospeedr |= (init->speed<<(pin*2));                                         
 17                                                                                        
 18     GPIOx->pupdr &= ~(0x3<<(pin*2));                                                  
 19     GPIOx->pupdr |= (init->pupd<<(pin*2));                                            
 20     return;                                                                            
 21 }                                                                                      
 22                                                                                        
 23 //1.需要写入哪一组的GPIO端口                                                           
 24 //2.具体哪一个引脚                                                                     
 25 //3.需要写入的是什么数据                                                               
 26 void hal_gpio_write(gpio_config_t *GPIOx , unsigned int pin , gpio_state state)        
 27 {                                                                                      
 28     if(state)                                                                          
 29     {                                                                                  
 30         GPIOx->odr |= (0x1<odr &= ~(0x1<

main.c

|  1 #include "./include/gpio.h"                                 
|  2                                                             
|  3 extern void printf(const char *fmt, ...);                   
|  4 void delay_ms(int ms)                                       
|  5 {                                                           
|  6     int i,j;                                                
|  7     for(i = 0; i< ms;i++)                                  
|  8         for (j = 0; j< 1800; j++);                         
|  9 }                                                           
| 10                                                             
| 11 void led_init()                                             
| 12 {                                                           
| 13     //GPIOE\F RCC enable                                    
| 14     RCC_MP_AHB4ENSETR |= (0X3<<4);                         
| 15     gpio_init init = {                                      
| 16         .mode = GPIO_OUTPUT,                                
| 17         .type = GPIO_PP,                                    
| 18         .speed = GPIO_LOW,                                  
| 19         .pupd = GPIO_NO_PULL,                               
| 20     };                                                      
| 21                                                             
| 22     hal_gpio_init(GPIOE , GPIO_PIN_10 , &init);             
| 23     hal_gpio_init(GPIOE , GPIO_PIN_8 , &init);              
| 24     hal_gpio_init(GPIOF , GPIO_PIN_10 , &init);             
| 25                                                             
| 26     return;                                                 
| 27 }                                                           
| 28                                                             
| 29 void led_disply()                                           
| 30 {                                                           
| 31     hal_gpio_write(GPIOE , GPIO_PIN_10 , GPIO_SET);         
| 32     delay_ms(100);                                          
| 33     hal_gpio_write(GPIOE , GPIO_PIN_10 , GPIO_RESET);       
| 34     delay_ms(100);
| 35                                                             
| 36     hal_gpio_write(GPIOF , GPIO_PIN_10 , GPIO_SET);         
| 37     delay_ms(100);                                          
| 38     hal_gpio_write(GPIOF, GPIO_PIN_10 , GPIO_RESET);        
| 39     delay_ms(100);                                          
| 40                                                             
| 41     hal_gpio_write(GPIOE , GPIO_PIN_8 , GPIO_SET);          
| 42     delay_ms(100);                                          
| 43     hal_gpio_write(GPIOE , GPIO_PIN_8 , GPIO_RESET);        
| 44     delay_ms(100);                                          
| 45                                                             
| 46     hal_gpio_write(GPIOF , GPIO_PIN_10 , GPIO_SET);         
| 47     delay_ms(100);                                          
| 48     hal_gpio_write(GPIOF, GPIO_PIN_10 , GPIO_RESET);        
| 49     delay_ms(100);                                          
| 50                                                             
| 51     return;                                                 
| 52 }                                                           
| 53                                                             
| 54                                                             
| 55 int main()                                                  
| 56 {                                                           
| 57     led_init();                                             
| 58                                                             
| 59     while(1)                                                
| 60         led_disply();                                       
| 61                                                             
| 62     return 0;                                               
| 63 }                                                           
|~                                                               
|~                                                              

现象

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页名称:GPIOtoLEDC语言之点灯之再封装-创新互联
网站地址:http://scyanting.com/article/dohhgp.html