GPIO口的 LED 点亮(以STM32F407IGTb芯片为例 )
1、掌握的GPIO口的使用方法
2、熟悉Keil uVision5工具软件的使用
原理:
只要是对硬件操作,就要首先查看原理图。
查看外设是给模块的MCU的哪个引脚相连。
FS-STM32F407开发平台上的LED的亮灭状态,与芯片上的引脚I/O输出电平有关。
FS-STM32F407开发平台上LED的I/O扩展:
IO操作重要结构体:GPIO_InitTypeDef
typedef struct
{
uint32_t Pin; 操作的管脚
uint32_t Mode; 模式选择
uint32_t Pull; 上拉下拉,或者都不加
uint32_t Speed; 速度选择
uint32_t Alternate; 管脚复用模式
} GPIO_InitTypeDef;
1、Mode
输入(复位状态)/input(reset state)
通用输出模式 / general purpose output mode
复用功能模式 / alternate function mode
模拟模式 / analog mode
#define GPIO_MODE_INPUT ((uint32_t)0x00000000) /*!< Input Floating Mode */
#define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001) /*!< Output Push Pull Mode*/
#define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011) /*!< Output Open Drain Mode*/
#define GPIO_MODE_AF_PP ((uint32_t)0x00000002) /*!< Alternate Function Push Pull Mode*/
#define GPIO_MODE_AF_OD ((uint32_t)0x00000012) /*!< Alternate Function Open Drain Mode*/
2、Speed
为了降低STM32处理器的功耗,可以依据实际的需求,选择合适的时钟速率,GPIO口支持的最大时钟速率越低,它产生的功耗也越低。
#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW
#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM
#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH
#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH
3、初始化GPIO的代码
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOF_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9 |GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);
}
调用的HAL函数解析: void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx , uint16_t GPIO_Pin, GPIO_PinState PinState);
该函数其实是对BSRR 寄存器进行操作,第一个参数传的是GPIO所在的组,第二个是操作第几个管脚,第三个是对管脚进行置位。
利用STM32CubeMX来架构程序
1、打开STM32CubeMX选择芯片
2、对管脚进行配置
3、点击CONFIGURATION
4、点击生成工程按钮
源代码:
(仅需要用户添加的代码)
/* USER CODE BEGIN 0 */
#define led1_port GPIOF
#define led1_pin GPIO_PIN_7
#define led2_port GPIOF
#define led2_pin GPIO_PIN_8
#define led3_port GPIOF
#define led3_pin GPIO_PIN_9
#define led4_port GPIOF
#define led4_pin GPIO_PIN_10
#define set_high(p,i) {p->BSRR = i;} //给高电平 熄灭
#define set_low(p,i) {p->BSRR = (uint32_t)i << 16U;} //给低电平 点亮
#define led1_off set_high(led1_port,led1_pin)
#define led1_no set_low(led1_port,led1_pin)
#define led2_off set_high(led2_port,led2_pin)
#define led2_no set_low(led2_port,led2_pin)
#define led3_off set_high(led3_port,led3_pin)
#define led3_no set_low(led3_port,led3_pin)
#define led4_off set_high(led4_port,led4_pin)
#define led4_no set_low(led4_port,led4_pin)
void led_1234(void);
/* USER CODE END 0 */
.
.
.
/* USER CODE BEGIN 3 */
led_1234();--------------------main函数中调用
/* USER CODE END 3 */
.
.
.
/* USER CODE BEGIN 4 */
void led_1234(void)
{
led1_no; //led1打开
HAL_Delay(1000); //延时1秒
led1_off; //led1关闭
HAL_Delay(1000); //延时1秒
led2_no; //led2打开
HAL_Delay(1000); //延时1秒
led2_off; //led2关闭
HAL_Delay(1000); //延时1秒
led3_no; //led3打开
HAL_Delay(1000); //延时1秒
led3_off; //led3关闭
HAL_Delay(1000); //延时1秒
led4_no; //led4打开
HAL_Delay(1000); //延时1秒
led4_off; //led4关闭
HAL_Delay(1000); //延时1秒
}
/* USER CODE END 4 */
编程要点:
1.使能GPIO端口时钟
2.初始化GPIO目标引脚为推挽输出
3.控制GPIO引脚输出高低电平
上一篇:STM32-点亮LED灯(GPIO配置)
下一篇:STM32——FlagStatus与ITStatus
推荐阅读
史海拾趣
随着技术的成熟,APMI开始着手市场拓展。公司积极与各大电子制造商合作,为其提供定制的电源管理解决方案。同时,APMI还加大了品牌宣传力度,通过参加行业展会、发布技术白皮书等方式,提高品牌知名度和影响力。凭借卓越的产品性能和完善的售后服务,APMI在市场上赢得了良好的口碑,客户群体不断扩大。
为了进一步扩大市场份额,达晶微积极拓展国际市场。公司在深圳、上海、苏州、台湾、青岛、长沙、韩国、北美等地设立了销售办事处,与当地企业建立了紧密的合作关系。同时,达晶微还积极寻求与国际知名企业的合作机会,通过引进先进技术和管理经验,不断提升自身实力。
进入21世纪后,三环(CCTC)公司迎来了快速发展的机遇期。公司根据市场需求和技术发展趋势,积极调整产品结构,形成了多元化布局。在这一阶段,公司先后发布了SOFC、PKG、GTM、氧化铝陶瓷基片以及TO部件等产品,并成功打入国内外市场。同时,公司加强了与国际知名企业的合作,提升了品牌影响力和市场竞争力。
CLARE公司始终坚持品质至上的原则,从原材料采购到生产制造、质量检测等各个环节都严格把控,确保产品的品质和性能达到客户的期望。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。这些举措赢得了客户的信赖和好评,为CLARE公司的长期发展奠定了坚实的基础。
随着产品的不断完善,ELMEC开始考虑如何进一步拓展市场。然而,国际市场的竞争异常激烈,ELMEC的产品面临着来自各大跨国公司的挑战。为了打开市场,李明带领团队深入调研,了解客户需求,不断优化产品性能。同时,他们还积极参加各类国际展会,与潜在客户建立联系。经过几年的努力,ELMEC的产品逐渐获得了市场的认可,销售额也稳步增长。
这是由Art Lebedev Studio设计的一款看似简直但并不简略的机械时钟Segmentus Clock,钟体的表面为一层半透明材料,用户可以透过这层半透明材料看到里面时钟的运作,它的显示模式和电子时钟的显示雷同,但是当它每分每秒走动的时候连接数字的每一个 ...… 查看全部问答∨ |
选用热继电器一般以电机额定电流为准.如电机额定电流为3A,而选择热继电器为1.5~3.5间.设定时以电机的负载为准.如负载比较稳定时,热继电器设定的电流为电机额定电流.如负载波动比较大时可稍微加大些. 如果是电机直接启动开关设备热继电器电流应选 ...… 查看全部问答∨ |
约束UCF文件,从Constrains Editor直接输入是最方便、最直接的添加约束的方法了。我总结了以下几种常用的语法: 2 \\- i: T u/ Q! k2 u\" T2 v* r; H\" M$ `\" A6 Q7 s4 x1)周期约束 ; n, M$ i6 B! t: {约束是一个基本时序和综合约束, ...… 查看全部问答∨ |
http://www.farsight.com.cn/ 有个嵌入式培训,4个月。在上海 10.19日开班。我现在准备去 因为合伙报名有优惠5%的优惠,所以问一下有没有同去。绝对不是帮做广告!!因为我确实准备去打算。 如果有去的,就联系一下,一起去报名。QQ346212241. ...… 查看全部问答∨ |
环境:WinCE 4.2 EVC开发 Dialog对话框,其中用了一个List Control控件 设置为了表格形式, 但是在设置字体时,无法正常完成,具体表现如下: CFont ft; LOGFONT lf; &nbs ...… 查看全部问答∨ |
我在PB5.0中调试单一的工程可以么?就是我不想每次都生成新的系统镜像。就像在VS2005中调试一样,修改代码、F5就开始编译链接、部署、断点,这样就方便多了阿,要不我不是在PB中每次都得从新生成系统镜像了?多麻烦… 查看全部问答∨ |
103K作为从属, 另外一块CPU作为主控, 时钟频率大概200HZ 在103K这边经常会收到错误的地址 但使用逻辑分析仪看波形是正确的 可能是哪里出错了呢?… 查看全部问答∨ |