历史上的今天
今天是:2025年04月23日(星期三)
2019年04月23日 | STM32学习笔记-点亮第一个led
2019-04-23 来源:eefocus
点亮第一个led灯之前要先大概了解一下单片机的工作方式并且有一定的编程基础,能看懂程序
单片机上有很多引脚,被称作io口,io口是通过总线(信号传输的通路)与内部处理系统(执行程序的硬件的总称)相连接,内部处理系统执行c语言程序可以直接控制io口,硬件机器只能识别机器码,但是已经有人一层一层的从底层封装,封装好了stm32 c语言库函数.因此,我们只需调用库函数即可.
点亮第一个io口的核心问题就是io口的配置(初始化)
void GPIOC13(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
上面是一个初始化c13口的例子,在stm32库函数中,由于实现每个功能(配置每个功能)都需要很多参数,因此库函数中用结构体的方式,把每个参数放到结构体成员中,再通过一个函数将结构变量的指针传入调用该函数就可以实现初始化.
比如上面初始化c13口的例子"GPIO_InitTypeDef"是一个结构体这里定义了一个名字为"GPIO_InitStructure"的结构体变量RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);这句是使能(打开0)apb2总线的时钟,不是结构体内容,io口工作必须打开这个时钟从
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;这行开始给结构体成员赋值,这个成员是引脚代号这里是13,
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;这个成员是总线时钟速度,这里是50mhz(设置了这个io口输出信号的速率)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;这个成员是输出模式,现在是推挽模
stm32的io口几种模式这里有一篇讲解http://blog.csdn.net/lq18811566072/article/details/51585743
1.推挽输出,输出能力强,开关速度快,数字信号输出.
2.开漏输出,利用外部电路驱动
3.浮空输入,io口的电平是悬空的,不确定的,完全由外部输入决定.
4.上拉下拉模拟输入,上拉为io口高电平,下拉为io口低电平,模拟输入为模拟量输入.
5.复用开漏输出,复用推挽输出,io被用作第二种用途.
配置好这个结构体后,调用GPIO_Init(GPIOC, &GPIO_InitStructure);io初始化函数参数1是gpiox,stm32中io口以字母和数字标号,第二个参数为结构体变量的地址.
最后在入口函数(main函数)中调用该初始化函数即可完成io的初始化.
GPIO_ResetBits(GPIO,GPIO_Pin_13);GPIO_SetBits(GPIOB,GPIO_Pin_13);
推挽模式下这两个函数控制io高低电平.
上一篇:STM32学习笔记-定时器中断
下一篇:GPIO相关寄存器配置详解
史海拾趣
|
介绍一下STM32开发都有什么工具,资料需要到什么地方下载。 一、STM32资料 ST对于其新的32bit MCU平台的重视程度可从其提供的应用笔记的数量和相应的参考代码上可见一斑。 STM32的全部英文官方版本下载地址: ...… 查看全部问答> |
|
现已有4k rom大小,现因为程序大于4k了我想换成8k,改了地址线和相关配置,但是程序(5k左右)下进去运行不正常,请问怎么才能正确设置rom大小呢?fpga芯片是EP2C5T144C8… 查看全部问答> |
|
我在程序中使用MmMapIoSpace操纵GPIO, 可是貌似没有效果,请各位老大帮忙看看!谢拉。 volatile static S5PC100_GPIO_REG * pGPIOReg = NULL; &nbs ...… 查看全部问答> |
|
void HookISR() using 1 //using 1 的意思是用寄存器1吗? { if (_bHook) return; //这句是不是说如果_bHook的值为真的话,那么就退出这个函数呢,不再执行下面的语句?如果如果_bHook的值为假的话,就顺序执行下面的语 ...… 查看全部问答> |
|
基于2440的wince 4.2的系统--为什么在增加串口驱动后,无法sleep!? 辛苦了2天,终于把调试口uart1修改为了com3,解决了搞波特率丢数据的问题.. 本以为可以好好休息了... 结果没有想到,在串口一切正常的时候,系统无法sleep了.. 按键待机之后,屏幕依然亮着,触摸无响应 由于调试口uart1修改为了com3,无法在调 ...… 查看全部问答> |
|
项目所限,必须用UPSD3234A-40U6来开发, 不熟,拿个开发板来熟悉一下. 我找新的很难找到,有谁知道再哪里搞到,不胜感激. 价格没问题 电话联系我: 13560625340… 查看全部问答> |
|
在Q II环境下出现了如下警告,请教高人给予指点解决办法: ---------------------------------------------------------------------- 1. Warning: Found 6 output pins without output pin load capacitance assignment &nbs ...… 查看全部问答> |
|
Capacitive Touch BoosterPack (430BOOST-SENSE1) for the LaunchPad User\'s Guide (Rev. B) slau337b 第15页 The User Experience application starts in sleep mode, sampling the proximity sensor approximately every 8.3 ms (VLO / 100 = ...… 查看全部问答> |




