矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 12683|回复: 64

研究STM32几天终于可以控制IO口了

[复制链接]
     
发表于 2020-1-1 19:59:10 | 显示全部楼层 |阅读模式
实现了流水灯

#include "stm32f10x.h" //头文件
void LED(void)             //PA口初始化
{  
         
     GPIO_InitTypeDef GPIO_InitStructure;

         
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

                     
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_5| GPIO_Pin_7 ;


         
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  

         
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

         
     GPIO_Init(GPIOA, &GPIO_InitStructure);     
}
void LED_GPIO(void)         //PC口初始化
{  
         
     GPIO_InitTypeDef GPIO_InitStructure;

         
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

                     
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15 | GPIO_Pin_1| GPIO_Pin_3 ;


         
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  

         
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

         
     GPIO_Init(GPIOC, &GPIO_InitStructure);     
}
void Delay_ms(uint16_t time)  //延时函数
{   
    u16 i=0;
    while(time--)
    {
        i=10000;        
        while(i--) ;   
    }
}
int main()
{
  
        LED_GPIO();   //初始化PC口
         LED();           //初始化PA口
        while(1)
        {
          
                                                                                                   
         
                                  GPIO_ResetBits(GPIOC,GPIO_Pin_1);              //关闭PC1
                                  GPIO_ResetBits(GPIOC,GPIO_Pin_3);             //关闭PC3
                                  GPIO_ResetBits(GPIOC,GPIO_Pin_13);
                                  GPIO_ResetBits(GPIOC,GPIO_Pin_15);
                                  GPIO_ResetBits(GPIOA,GPIO_Pin_1);
                                  GPIO_ResetBits(GPIOA,GPIO_Pin_3);
                                  GPIO_ResetBits(GPIOA,GPIO_Pin_5);
                                  GPIO_ResetBits(GPIOA,GPIO_Pin_7);
                                  Delay_ms(1000);
                                  GPIO_SetBits(GPIOC,GPIO_Pin_13);         //点亮PC13
                  
                                  Delay_ms(1000);                                     //延时
                     
                                  GPIO_SetBits(GPIOC,GPIO_Pin_15);          //点亮PC15
                     
                                  Delay_ms(1000);
         
                                  GPIO_SetBits(GPIOC,GPIO_Pin_1);            //点亮PC1
                     
                                  Delay_ms(1000);
                                  
                                  GPIO_SetBits(GPIOC,GPIO_Pin_3);           //点亮PC3
                     
                                  Delay_ms(1000);
                     
                                 GPIO_SetBits(GPIOA,GPIO_Pin_1);             //点亮PA1
                     
                                 Delay_ms(1000);
                               
                                 GPIO_SetBits(GPIOA,GPIO_Pin_3);
                     
                                 Delay_ms(1000);
                                       
                                GPIO_SetBits(GPIOA,GPIO_Pin_5);
                     
                                Delay_ms(1000);
                                       
                                GPIO_SetBits(GPIOA,GPIO_Pin_7);
                     
                                Delay_ms(1000);
                               
                               
        }
}

45142.png

     
发表于 2020-1-3 11:14:29 | 显示全部楼层
无敌吴刚 发表于 2020-1-3 10:32
请问一下是哪本书?在哪下载啊?我也想看!!

STM32库开发实战指南
回复 支持 1 反对 0

使用道具 举报

     
 楼主| 发表于 2020-1-1 20:26:14 来自手机 | 显示全部楼层
简单活着 发表于 2020-1-1 20:18
我的系统板刚到,环境还没有搭建好

系统搭建最麻烦了,我搞好久都不行,最后花钱淘宝请人安装KEIL5!
回复 支持 0 反对 1

使用道具 举报

     
发表于 2020-1-1 20:18:46 | 显示全部楼层
我的系统板刚到,环境还没有搭建好
回复 支持 反对

使用道具 举报

     
发表于 2020-1-1 20:25:37 | 显示全部楼层
HAL库是大趋势啊,配置起来也很简单
回复 支持 反对

使用道具 举报

     
发表于 2020-1-1 21:49:32 | 显示全部楼层
分立元件 发表于 2020-1-1 20:26
系统搭建最麻烦了,我搞好久都不行,最后花钱淘宝请人安装KEIL5!

还有这个招数?那还不如直接买程序呢。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-1 21:53:24 来自手机 | 显示全部楼层
w6955 发表于 2020-1-1 21:49
还有这个招数?那还不如直接买程序呢。

自己安装编译软件太麻烦了,花十几二十块就能远程解决问题,自己也学到一些!偷偷的告诉你,其实我好多软件都是花钱安装的,因为自己安装成功,老是出现问题!
回复 支持 反对

使用道具 举报

     
发表于 2020-1-1 22:00:26 | 显示全部楼层
分立元件 发表于 2020-1-1 21:53
自己安装编译软件太麻烦了,花十几二十块就能远程解决问题,自己也学到一些!偷偷的告诉你,其实我好多软 ...

那你可得做好备份,关系到钱包呢!
回复 支持 反对

使用道具 举报

     
发表于 2020-1-1 22:11:24 | 显示全部楼层
学习无线电有什么用?直说,没任何用。就是提高自己认识、分析、掌握、控制事物的能力,其中最重要的就是毅力。高等级的无线电设备都不是自己可以简单做出来的,所以这个就是学习、锻炼。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-1 22:22:42 | 显示全部楼层
本帖最后由 分立元件 于 2020-1-1 22:28 编辑

在贴一个按键控制LED的程序!

#include "stm32f10x.h"
void KEY_Init(void)                          //按键初始化
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);      
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;      
  
    GPIO_Init(GPIOA,&GPIO_InitStructure);      
}

void LED_GPIO(void)                       //PC口初始化
{  
         
     GPIO_InitTypeDef GPIO_InitStructure;

         
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

                     
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15 | GPIO_Pin_1| GPIO_Pin_3 ;


         
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  

         
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

         
     GPIO_Init(GPIOC, &GPIO_InitStructure);     
}
   int main()
{
        KEY_Init();
        LED_GPIO();
        while(1)
        {
          
                      if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)     //判断按键是否按下
                    {
                     GPIO_SetBits(GPIOC,GPIO_Pin_1);
                      GPIO_SetBits(GPIOC,GPIO_Pin_3);                    //按下则输出高电平
                      GPIO_SetBits(GPIOC,GPIO_Pin_13);
                      GPIO_SetBits(GPIOC,GPIO_Pin_15);
                    }
                     else
                     {  
                      GPIO_ResetBits(GPIOC,GPIO_Pin_1);
                      GPIO_ResetBits(GPIOC,GPIO_Pin_3);            //不按下则输出低电平
                      GPIO_ResetBits(GPIOC,GPIO_Pin_13);
                      GPIO_ResetBits(GPIOC,GPIO_Pin_15);
                                                }
         
                               
               
        }
}
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-1 22:24:36 | 显示全部楼层
w6955 发表于 2020-1-1 22:11
学习无线电有什么用?直说,没任何用。就是提高自己认识、分析、掌握、控制事物的能力,其中最重要的就是毅 ...

就是爱好吧,像别人喜欢钓鱼,喜欢冒险!
回复 支持 反对

使用道具 举报

     
发表于 2020-1-2 15:41:09 | 显示全部楼层
本帖最后由 iffi123 于 2020-1-2 15:45 编辑

这些网上的示例程序多的是,库函数开发本来就比较简单

不过我不喜欢用库函数控制IO, 喜欢象51那样直接位操作, 所以我找了个位段别名区的头文件,对IO口输入输出更简单,无需频繁调用 GPIO_Init, 这个库函数对应汇编有近100条指令
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-2 18:02:42 来自手机 | 显示全部楼层
iffi123 发表于 2020-1-2 15:41
这些网上的示例程序多的是,库函数开发本来就比较简单

不过我不喜欢用库函数控制IO, 喜欢象51那样直接位 ...

是啊,51那种用习惯我用这种方式不太适应,GPIO.H这个没有研究过,要是不用这个不知道程序复杂不?
回复 支持 反对

使用道具 举报

     
发表于 2020-1-2 20:28:42 | 显示全部楼层
分立元件 发表于 2020-1-1 20:26
系统搭建最麻烦了,我搞好久都不行,最后花钱淘宝请人安装KEIL5!

还有这种操作……666
回复 支持 反对

使用道具 举报

     
发表于 2020-1-2 22:04:33 来自手机 | 显示全部楼层
哈哈!一大堆!果然是和51很不一样啊!看起来一个都看不懂!!哈哈!
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-2 22:38:48 来自手机 | 显示全部楼层
无敌吴刚 发表于 2020-1-2 22:04
哈哈!一大堆!果然是和51很不一样啊!看起来一个都看不懂!!哈哈!

代码字符太长了,看的头晕,IO使用之前都要初始化后才能使用!子函数用的少,都是封装成头文件,其它和51没有太大区别,还有就是建工程,加头文件之类的操作有点麻烦,现在我都没有搞懂,都是直接使用别人建好的“工程模板”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-4-25 22:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表