研究STM32几天终于可以控制IO口了
实现了流水灯:lol#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);
}
}
无敌吴刚 发表于 2020-1-3 10:32
请问一下是哪本书?在哪下载啊?我也想看!!
STM32库开发实战指南 简单活着 发表于 2020-1-1 20:18
我的系统板刚到,环境还没有搭建好
系统搭建最麻烦了,我搞好久都不行,最后花钱淘宝请人安装KEIL5! 我的系统板刚到,环境还没有搭建好
HAL库是大趋势啊,配置起来也很简单:) 分立元件 发表于 2020-1-1 20:26
系统搭建最麻烦了,我搞好久都不行,最后花钱淘宝请人安装KEIL5!
还有这个招数?那还不如直接买程序呢。 w6955 发表于 2020-1-1 21:49
还有这个招数?那还不如直接买程序呢。
自己安装编译软件太麻烦了,花十几二十块就能远程解决问题,自己也学到一些!偷偷的告诉你,其实我好多软件都是花钱安装的,因为自己安装成功,老是出现问题! 分立元件 发表于 2020-1-1 21:53
自己安装编译软件太麻烦了,花十几二十块就能远程解决问题,自己也学到一些!偷偷的告诉你,其实我好多软 ...
那你可得做好备份,关系到钱包呢! 学习无线电有什么用?直说,没任何用。就是提高自己认识、分析、掌握、控制事物的能力,其中最重要的就是毅力。高等级的无线电设备都不是自己可以简单做出来的,所以这个就是学习、锻炼。 本帖最后由 分立元件 于 2020-1-1 22:28 编辑
在贴一个按键控制LED的程序!
#include "stm32f10x.h"
void KEY_Init(void) //按键初始化
{
GPIO_InitTypeDefGPIO_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);
}
}
}
w6955 发表于 2020-1-1 22:11
学习无线电有什么用?直说,没任何用。就是提高自己认识、分析、掌握、控制事物的能力,其中最重要的就是毅 ...
就是爱好吧,像别人喜欢钓鱼,喜欢冒险! 本帖最后由 iffi123 于 2020-1-2 15:45 编辑
这些网上的示例程序多的是,库函数开发本来就比较简单
不过我不喜欢用库函数控制IO, 喜欢象51那样直接位操作, 所以我找了个位段别名区的头文件,对IO口输入输出更简单,无需频繁调用 GPIO_Init, 这个库函数对应汇编有近100条指令 iffi123 发表于 2020-1-2 15:41
这些网上的示例程序多的是,库函数开发本来就比较简单
不过我不喜欢用库函数控制IO, 喜欢象51那样直接位 ...
是啊,51那种用习惯我用这种方式不太适应,GPIO.H这个没有研究过,要是不用这个不知道程序复杂不? 分立元件 发表于 2020-1-1 20:26
系统搭建最麻烦了,我搞好久都不行,最后花钱淘宝请人安装KEIL5!
还有这种操作……666 哈哈!一大堆!果然是和51很不一样啊!看起来一个都看不懂!!哈哈! 无敌吴刚 发表于 2020-1-2 22:04
哈哈!一大堆!果然是和51很不一样啊!看起来一个都看不懂!!哈哈!
代码字符太长了,看的头晕,IO使用之前都要初始化后才能使用!子函数用的少,都是封装成头文件,其它和51没有太大区别,还有就是建工程,加头文件之类的操作有点麻烦,现在我都没有搞懂,都是直接使用别人建好的“工程模板”