GPIO输出——使用固件库点亮LED 宏定义遇到的问题

刚开始看STM32F10x固件库例程,GPIO输出——使用固件库点亮LED灯,在bsp_led.h中:

/*直接操作寄存器的方法控制*/
#define    digitalHi(p,i)         {p->BSRR=i;}     //输出为高电平     
#define    digitalLo(p,i)         {p->BRR=i;}      //输出为低电平
#define    digitalToggle(p,i)     {p->ODR ^=i;}    //输出反转状态


/* 定义控制IO的宏 */
#define LED1_TOGGLE         digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_OFF            digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_ON             digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)

//红
#define LED_RED  \
                    LED1_ON;\
                    LED2_OFF\
                    LED3_OFF

不懂 #define digitalHi(p, i) {p->BSRR = i;}中 p 和 i 在哪定义的,蠢死。
参考#define定义宏函数 的正确使用,得以解决此问题。
在此程序宏函数的定义中,直接以无类型的形参来操作寄存器,形参的类型由调用此宏函数时传入的实参来决定,所以在此处宏函数的形参无类型。
——脑子是个好东西

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用STM32固件点亮LED流水灯可能会遇到以下问题: 1. LED无法点亮 如果LED无法点亮,可能是因为没有正确配置GPIO端口的输出模式或者没有正确设置GPIO输出电平。需要确认以下几点: - 确认GPIO端口的时钟已经使能 - 确认GPIO端口的输出模式已经设置为推挽输出模式 - 确认GPIO输出电平已经设置为高电平或低电平 2. LED闪烁或者流水灯顺序不正确 如果LED闪烁或者流水灯顺序不正确,可能是因为时钟频率设置不正确或者延时函数的时间不够准确导致的。需要确认以下几点: - 确认系统时钟频率设置正确 - 确认延时函数的时间设置准确,可以使用示波器观察LED闪烁的时间来进行调整 解决方法: 在使用STM32固件点亮LED流水灯时,可以采用以下步骤进行配置和编程: 1. 配置GPIO端口 使用GPIO_Init函数对GPIO端口进行配置,设置相应的端口和引脚号、输出模式和输出电平等参数。 2. 编写流水灯程序 根据需要编写流水灯程序,可以使用for循环或者while循环控制LED的流动顺序,并在每个LED流动到的位置使用延时函数控制LED的亮灭时间。 3. 烧录程序 将程序烧录到STM32芯片中,通过调试工具观察LED的亮灭状态,进行调试和优化。 需要注意的是,为了保证程序的稳定性和可靠性,建议在编写程序时使用宏定义等方法来定义常量和变量,避免使用硬编码方式。同时,建议使用示波器等工具来观察LED的亮灭状态和延时函数的准确性,以便进行调试和优化。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值