在线时间794 小时
UID3067179
注册时间2014-10-23
NXP金币981
TA的每日心情 | 开心 前天 08:28 |
---|
签到天数: 1313 天 [LV.10]以坛为家III
版主
- 积分
- 7552
- 最后登录
- 2024-3-27
|
本帖最后由 TLLED 于 2021-4-8 22:21 编辑
这节还是熟悉GPIO口硬件,模拟SPI驱动TM1638模块。
一、硬件电路
1.1、RT1010开发板使用的引脚
使用Arduino扩展口J26的三个端口,对应的电路图如下
1.2、tm1638模块的电路图
引脚的定义关系
- #define TM1638_DIO_PIN (15U) //GPIO_AD_01
- #define TM1638_CLK_PIN (16U) //GPIO_AD_02
- #define TM1638_STB_PIN (28U) //GPIO_AD_14
复制代码
二、程序部分
2.1、tm1638.c
- /*
- * Copyright 2019 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- /***********************************************************************************************************************
- * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
- * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
- **********************************************************************************************************************/
- /*
- * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
- !!GlobalInfo
- product: Pins v6.0
- processor: MIMXRT1011xxxxx
- package_id: MIMXRT1011DAE5A
- mcu_data: ksdk2_0
- processor_version: 0.0.4
- * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
- */
- #include "fsl_common.h"
- #include "fsl_iomuxc.h"
- #include "pin_mux.h"
- /* FUNCTION ************************************************************************************************************
- *
- * Function Name : BOARD_InitBootPins
- * Description : Calls initialization functions.
- *
- * END ****************************************************************************************************************/
- void BOARD_InitBootPins(void) {
- BOARD_InitPins();
- }
- /*
- * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
- BOARD_InitPins:
- - options: {callFromInitBoot: 'true', coreID: core0, enableClock: 'true'}
- - pin_list:
- - {pin_num: '3', peripheral: LPUART1, signal: RXD, pin_signal: GPIO_09, software_input_on: Disable, open_drain: Disable, drive_strength: R0_4}
- - {pin_num: '2', peripheral: LPUART1, signal: TXD, pin_signal: GPIO_10, software_input_on: Disable, open_drain: Disable, drive_strength: R0_4}
- - {pin_num: '1', peripheral: GPIO1, signal: 'gpiomux_io, 11', pin_signal: GPIO_11, open_drain: Disable, pull_keeper_select: Pull, pull_up_down_config: Pull_Up_47K_Ohm}
- * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
- */
- /* FUNCTION ************************************************************************************************************
- *
- * Function Name : BOARD_InitPins
- * Description : Configures pin routing and optionally pin electrical features.
- *
- * END ****************************************************************************************************************/
- void BOARD_InitPins(void) {
- CLOCK_EnableClock(kCLOCK_Iomuxc); /* iomuxc clock (iomuxc_clk_enable): 0x03U */
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_09_LPUART1_RXD, /* GPIO_09 is configured as LPUART1_RXD */
- 0U); /* Software Input On Field: Input Path is determined by functionality */
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_10_LPUART1_TXD, /* GPIO_10 is configured as LPUART1_TXD */
- 0U); /* Software Input On Field: Input Path is determined by functionality */
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_11_GPIOMUX_IO11, /* GPIO_11 is configured as GPIOMUX_IO11 */
- 0U); /* Software Input On Field: Input Path is determined by functionality */
- //add tm1638
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_AD_02_GPIOMUX_IO16, //GPIO_AD_02
- 0U);
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_AD_01_GPIOMUX_IO15, //GPIO_AD_01
- 0U);
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_AD_14_GPIOMUX_IO28, //GPIO_AD_14
- 0U);
-
- IOMUXC_GPR->GPR26 = ((IOMUXC_GPR->GPR26 &
- (~(IOMUXC_GPR_GPR26_GPIO_SEL_MASK))) /* Mask bits to zero which are setting */
- | IOMUXC_GPR_GPR26_GPIO_SEL(0x00U) /* Select GPIO1 or GPIO2: 0x00U */
- );
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_09_LPUART1_RXD, /* GPIO_09 PAD functional properties : */
- 0x10A0U); /* Slew Rate Field: Slow Slew Rate
- Drive Strength Field: R0/4
- Speed Field: fast(150MHz)
- Open Drain Enable Field: Open Drain Disabled
- Pull / Keep Enable Field: Pull/Keeper Enabled
- Pull / Keep Select Field: Keeper
- Pull Up / Down Config. Field: 100K Ohm Pull Down
- Hyst. Enable Field: Hysteresis Disabled */
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_10_LPUART1_TXD, /* GPIO_10 PAD functional properties : */
- 0x10A0U); /* Slew Rate Field: Slow Slew Rate
- Drive Strength Field: R0/4
- Speed Field: fast(150MHz)
- Open Drain Enable Field: Open Drain Disabled
- Pull / Keep Enable Field: Pull/Keeper Enabled
- Pull / Keep Select Field: Keeper
- Pull Up / Down Config. Field: 100K Ohm Pull Down
- Hyst. Enable Field: Hysteresis Disabled */
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_11_GPIOMUX_IO11, /* GPIO_11 PAD functional properties : */
- 0x70A0U); /* Slew Rate Field: Slow Slew Rate
- Drive Strength Field: R0/4
- Speed Field: fast(150MHz)
- Open Drain Enable Field: Open Drain Disabled
- Pull / Keep Enable Field: Pull/Keeper Enabled
- Pull / Keep Select Field: Pull
- Pull Up / Down Config. Field: 47K Ohm Pull Up
- Hyst. Enable Field: Hysteresis Disabled */
-
- //add tm1638
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_AD_02_GPIOMUX_IO16, //GPIO_AD_02
- 0x70A0U);
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_AD_01_GPIOMUX_IO15, //GPIO_AD_01
- 0x70A0U);
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_AD_14_GPIOMUX_IO28, //GPIO_AD_14
- 0x70A0U);
- }
- /***********************************************************************************************************************
- * EOF
- **********************************************************************************************************************/
复制代码
2.2、tm1638.h
- #ifndef _TM1638_H_
- #define _TM1638_H_
- #include "clock_config.h"
- #include "fsl_common.h"
- #include "fsl_gpio.h"
- #define DATA_COMMAND 0X40
- #define DISP_COMMAND 0x80
- #define ADDR_COMMAND 0XC0
- #define TM1638_GPIO GPIO1
- #define TM1638_DIO_PIN (15U) //GPIO_AD_01
- #define TM1638_CLK_PIN (16U) //GPIO_AD_02
- #define TM1638_STB_PIN (28U) //GPIO_AD_14
- #define DIO_L() GPIO_PinWrite(TM1638_GPIO, TM1638_DIO_PIN, 0)
- #define DIO_H() GPIO_PinWrite(TM1638_GPIO, TM1638_DIO_PIN, 1)
- #define CLK_L() GPIO_PinWrite(TM1638_GPIO, TM1638_CLK_PIN, 0)
- #define CLK_H() GPIO_PinWrite(TM1638_GPIO, TM1638_CLK_PIN, 1)
- #define STB_L() GPIO_PinWrite(TM1638_GPIO, TM1638_STB_PIN, 0)
- #define STB_H() GPIO_PinWrite(TM1638_GPIO, TM1638_STB_PIN, 1)
- void init_tm1638(void);
- void TM1638_Disp(char* dat);
- void tm1638_writeallLED(uint8_t LED_flag);
- uint8_t tm1638_readkey(void);
- #endif
复制代码
2.3、main.c- int main(void)
- {
- uint8_t dsp[8];
- uint8_t i=0;
- uint32_t js;
- uint8_t key=0;
- /* Define the init structure for the output LED pin*/
- gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
- /* Board pin, clock, debug console init */
- BOARD_ConfigMPU();
- BOARD_InitPins();
- BOARD_BootClockRUN();
- BOARD_InitDebugConsole();
- /* Print a note to terminal. */
- PRINTF("\r\n GPIO Driver example\r\n");
- PRINTF("\r\n The LED is blinking.\r\n");
- /* Init output LED GPIO. */
- GPIO_PinInit(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, &led_config);
-
- init_tm1638();
-
- for(i=0;i<8;i++)
- {
- dsp[i]=0;
- }
-
- while (1)
- {
- key=tm1638_readkey();
- if(key!=0)
- {
- PRINTF("key=0x%x \r\n",key);
- }
- TM1638_Disp(dsp);
- tm1638_writeallLED(i++);
- js++;
- if(js>9999)
- {
- js=0;
- }
- dsp[4]=js/1000;
- dsp[5]=(js%1000)/100;
- dsp[6]=((js%1000)%100)/10;
- dsp[7]=((js%1000)%100)%10;
- SDK_DelayAtLeastUs(100000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
- #if (defined(FSL_FEATURE_IGPIO_HAS_DR_TOGGLE) && (FSL_FEATURE_IGPIO_HAS_DR_TOGGLE == 1))
- GPIO_PortToggle(EXAMPLE_LED_GPIO, 1u << EXAMPLE_LED_GPIO_PIN);
-
- #else
- if (g_pinSet)
- {
- GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 0U);
- g_pinSet = false;
- }
- else
- {
- GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 1U);
- g_pinSet = true;
- }
- #endif /* FSL_FEATURE_IGPIO_HAS_DR_TOGGLE */
- }
- }
复制代码
2.4、引脚初始化部分
- void BOARD_InitPins(void) {
- CLOCK_EnableClock(kCLOCK_Iomuxc); /* iomuxc clock (iomuxc_clk_enable): 0x03U */
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_09_LPUART1_RXD, /* GPIO_09 is configured as LPUART1_RXD */
- 0U); /* Software Input On Field: Input Path is determined by functionality */
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_10_LPUART1_TXD, /* GPIO_10 is configured as LPUART1_TXD */
- 0U); /* Software Input On Field: Input Path is determined by functionality */
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_11_GPIOMUX_IO11, /* GPIO_11 is configured as GPIOMUX_IO11 */
- 0U); /* Software Input On Field: Input Path is determined by functionality */
- //add tm1638
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_AD_02_GPIOMUX_IO16, //GPIO_AD_02
- 0U);
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_AD_01_GPIOMUX_IO15, //GPIO_AD_01
- 0U);
- IOMUXC_SetPinMux(
- IOMUXC_GPIO_AD_14_GPIOMUX_IO28, //GPIO_AD_14
- 0U);
-
- IOMUXC_GPR->GPR26 = ((IOMUXC_GPR->GPR26 &
- (~(IOMUXC_GPR_GPR26_GPIO_SEL_MASK))) /* Mask bits to zero which are setting */
- | IOMUXC_GPR_GPR26_GPIO_SEL(0x00U) /* Select GPIO1 or GPIO2: 0x00U */
- );
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_09_LPUART1_RXD, /* GPIO_09 PAD functional properties : */
- 0x10A0U); /* Slew Rate Field: Slow Slew Rate
- Drive Strength Field: R0/4
- Speed Field: fast(150MHz)
- Open Drain Enable Field: Open Drain Disabled
- Pull / Keep Enable Field: Pull/Keeper Enabled
- Pull / Keep Select Field: Keeper
- Pull Up / Down Config. Field: 100K Ohm Pull Down
- Hyst. Enable Field: Hysteresis Disabled */
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_10_LPUART1_TXD, /* GPIO_10 PAD functional properties : */
- 0x10A0U); /* Slew Rate Field: Slow Slew Rate
- Drive Strength Field: R0/4
- Speed Field: fast(150MHz)
- Open Drain Enable Field: Open Drain Disabled
- Pull / Keep Enable Field: Pull/Keeper Enabled
- Pull / Keep Select Field: Keeper
- Pull Up / Down Config. Field: 100K Ohm Pull Down
- Hyst. Enable Field: Hysteresis Disabled */
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_11_GPIOMUX_IO11, /* GPIO_11 PAD functional properties : */
- 0x70A0U); /* Slew Rate Field: Slow Slew Rate
- Drive Strength Field: R0/4
- Speed Field: fast(150MHz)
- Open Drain Enable Field: Open Drain Disabled
- Pull / Keep Enable Field: Pull/Keeper Enabled
- Pull / Keep Select Field: Pull
- Pull Up / Down Config. Field: 47K Ohm Pull Up
- Hyst. Enable Field: Hysteresis Disabled */
-
- //add tm1638
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_AD_02_GPIOMUX_IO16, //GPIO_AD_02
- 0x70A0U);
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_AD_01_GPIOMUX_IO15, //GPIO_AD_01
- 0x70A0U);
- IOMUXC_SetPinConfig(
- IOMUXC_GPIO_AD_14_GPIOMUX_IO28, //GPIO_AD_14
- 0x70A0U);
- }
复制代码
三、程序运行
3.1、模块显示
3.2、按下按键串口输出相应按键置
四、芯片端口的GPIO问题
RT1010芯片的GPIO端口总的有GPIO1,GPIO0和GPIO5,通过下图可以看出(GPIO00~GPIO13)和(GPIO_AD_00~GPIO_AD_14)属于GPIO1。刚开始在使用GPIO_AD_XX口作为GPIO口时,花费了一些时间。
|
|