完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
引脚定义
开发版上有一个USER LED,示例程序gpio_led_output里点亮的就是这个led。 在代码中是这样定义的。 #define EXAMPLE_LED_GPIO BOARD_USER_LED_GPIO #define EXAMPLE_LED_GPIO_PIN BOARD_USER_LED_GPIO_PIN 我们并不能局限于此,还要继续弄明白引脚如何定义的。毕竟真实的应用场景,使用的是不同的GPIO口。 开发板关于LED的电路图如下,USER_LED连接在F14,GPIO_AD_B0_09上。 在数据手册中,GPIO_AD_B0_09是GPIO1_IO09。 数据手册的名字是:i.MX RT1064 Processor Reference Manual ,表格在第273页。光上面的电路图和下面的表格就找了很久。表现在代码中 #define EXAMPLE_LED_GPIO GPIO1#define EXAMPLE_LED_GPIO_PIN (9U) 引脚配置IOMUX IOMUX是用来配置IO的。步骤如下:
MCUXpresso Config Tools中选择引脚。 选完之后还要在下面进行配置,照着gpio_led_output配置的,具体含义还不太清楚。这里的配置结果代码呈现的话是在IOMUXC_SetPinConfig中。 配置完成后会自动更新代码。 生成的IO口配置代码如下,IO口属性IOMUXC_SetPinConfig还没有完全弄明白,以后再分析。 void BOARD_InitPins(void) { CLOCK_EnableClock(kCLOCK_Iomuxc); IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_09_GPIO1_IO09, 0U); IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_09_GPIO1_IO09, 0x10B0U); } GPIO_PinInit 函数 初始化IO口:void GPIO_PinInit(GPIO_Type *base, uint32_t pin, const gpio_pin_config_t *Config); base:要设置的 GPIO 组,本文中的例子就是GPIO1。 pin:组内编号,本文中的例子是9。 Config:配置参数,使用结构体来设置指定 GPIO 的配置参数,此结构体如下: direction是方向,0:input;1:output outputLogic:默认输出电平 interruptMode:中断模式,具体解释在后面。 /*! @brief GPIO Init structure definition. */ typedef struct _gpio_pin_config { gpio_pin_direction_t direction; /*!< Specifies the pin direction. */ uint8_t outputLogic; /*!< Set a default output logic, which has no use in input */ gpio_interrupt_mode_t interruptMode; /*!< Specifies the pin interrupt mode, a value of @ref gpio_interrupt_mode_t. */ } gpio_pin_config_t; /*! @brief GPIO direction definition. */ typedef enum _gpio_pin_direction { kGPIO_DigitalInput = 0U, /*!< Set current pin as digital input.*/ kGPIO_DigitalOutput = 1U, /*!< Set current pin as digital output.*/ } gpio_pin_direction_t; /*! @brief GPIO interrupt mode definition. */ typedef enum _gpio_interrupt_mode { kGPIO_NoIntmode = 0U, /*!< Set current pin general IO functionality.*/ kGPIO_IntLowLevel = 1U, /*!< Set current pin interrupt is low-level sensitive.*/ kGPIO_IntHighLevel = 2U, /*!< Set current pin interrupt is high-level sensitive.*/ kGPIO_IntRisingEdge = 3U, /*!< Set current pin interrupt is rising-edge sensitive.*/ kGPIO_IntFallingEdge = 4U, /*!< Set current pin interrupt is falling-edge sensitive.*/ kGPIO_IntRisingOrFallingEdge = 5U, /*!< Enable the edge select bit to override the ICR register's configuration.*/ } gpio_interrupt_mode_t; GPIO_PinInit 函数的使用: gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode}; GPIO_PinInit(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, &led_config); GPIO_PinWrite 函数 设置指定的 GPIO 的输出电平:void GPIO_PinWrite(GPIO_Type *base, uint32_t pin, uint8_t output); base和bin的解释同上。 output:输出电平, 1 为高电平, 0 为低电平。 例子:点亮LED 给的例子是让LED闪烁。这里稍微改造下,用串口控制LED亮灭。 int main(void) { /* Define the init structure for the output LED pin*/ gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode}; char ch; /* Board pin, clock, debug console init */ BOARD_ConfigMPU(); BOARD_InitBootPins(); BOARD_InitBootClocks(); BOARD_InitDebugConsole(); /* Print a note to terminal. */ PRINTF("rn GPIO Driver examplern"); /* Init output LED GPIO. */ GPIO_PinInit(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, &led_config); while (1) { ch = GETCHAR(); if (ch=='0') GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 0U); else GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 1U); } } |
|
|
|
只有小组成员才能发言,加入小组>>
3216 浏览 9 评论
2899 浏览 16 评论
3407 浏览 1 评论
8850 浏览 16 评论
4001 浏览 18 评论
9635浏览 3评论
1013浏览 3评论
526浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
527浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2253浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-6 06:48 , Processed in 0.960669 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号