请选择 进入手机版 | 继续访问电脑版
查看: 108|回复: 5

[原创] 【i.MX RT1010体验】+ 3、驱动tm1638

[复制链接]
  • TA的每日心情
    开心
    昨天 08:05
  • 签到天数: 877 天

    [LV.10]以坛为家III

    89

    主题

    1929

    帖子

    31

    金豆

    金牌会员

    Rank: 6Rank: 6

    积分
    5130
    最后登录
    2021-4-12
    发表于 5 天前 | 显示全部楼层 |阅读模式
    本帖最后由 TLLED 于 2021-4-8 22:21 编辑

            这节还是熟悉GPIO口硬件,模拟SPI驱动TM1638模块。


        100.jpg


        一、硬件电路


        1.1、RT1010开发板使用的引脚
        使用Arduino扩展口J26的三个端口,对应的电路图如下
        001.png
        002.png


        1.2、tm1638模块的电路图
        003.png




        引脚的定义关系
       
    1. #define TM1638_DIO_PIN                                 (15U)                        //GPIO_AD_01
    2. #define TM1638_CLK_PIN                                 (16U)                        //GPIO_AD_02
    3. #define TM1638_STB_PIN                                 (28U)                        //GPIO_AD_14
    复制代码


        二、程序部分
       
        2.1、tm1638.c
       
    1. /*
    2. * Copyright 2019 NXP
    3. * All rights reserved.
    4. *
    5. * SPDX-License-Identifier: BSD-3-Clause
    6. */

    7. /***********************************************************************************************************************
    8. * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
    9. * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
    10. **********************************************************************************************************************/

    11. /*
    12. * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
    13. !!GlobalInfo
    14. product: Pins v6.0
    15. processor: MIMXRT1011xxxxx
    16. package_id: MIMXRT1011DAE5A
    17. mcu_data: ksdk2_0
    18. processor_version: 0.0.4
    19. * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
    20. */

    21. #include "fsl_common.h"
    22. #include "fsl_iomuxc.h"
    23. #include "pin_mux.h"

    24. /* FUNCTION ************************************************************************************************************
    25. *
    26. * Function Name : BOARD_InitBootPins
    27. * Description   : Calls initialization functions.
    28. *
    29. * END ****************************************************************************************************************/
    30. void BOARD_InitBootPins(void) {
    31.     BOARD_InitPins();
    32. }

    33. /*
    34. * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
    35. BOARD_InitPins:
    36. - options: {callFromInitBoot: 'true', coreID: core0, enableClock: 'true'}
    37. - pin_list:
    38.   - {pin_num: '3', peripheral: LPUART1, signal: RXD, pin_signal: GPIO_09, software_input_on: Disable, open_drain: Disable, drive_strength: R0_4}
    39.   - {pin_num: '2', peripheral: LPUART1, signal: TXD, pin_signal: GPIO_10, software_input_on: Disable, open_drain: Disable, drive_strength: R0_4}
    40.   - {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}
    41. * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
    42. */

    43. /* FUNCTION ************************************************************************************************************
    44. *
    45. * Function Name : BOARD_InitPins
    46. * Description   : Configures pin routing and optionally pin electrical features.
    47. *
    48. * END ****************************************************************************************************************/
    49. void BOARD_InitPins(void) {
    50.   CLOCK_EnableClock(kCLOCK_Iomuxc);           /* iomuxc clock (iomuxc_clk_enable): 0x03U */

    51.   IOMUXC_SetPinMux(
    52.       IOMUXC_GPIO_09_LPUART1_RXD,             /* GPIO_09 is configured as LPUART1_RXD */
    53.       0U);                                    /* Software Input On Field: Input Path is determined by functionality */
    54.   IOMUXC_SetPinMux(
    55.       IOMUXC_GPIO_10_LPUART1_TXD,             /* GPIO_10 is configured as LPUART1_TXD */
    56.       0U);                                    /* Software Input On Field: Input Path is determined by functionality */
    57.   IOMUXC_SetPinMux(
    58.       IOMUXC_GPIO_11_GPIOMUX_IO11,            /* GPIO_11 is configured as GPIOMUX_IO11 */
    59.       0U);                                    /* Software Input On Field: Input Path is determined by functionality */
    60.   //add tm1638
    61.         IOMUXC_SetPinMux(
    62.       IOMUXC_GPIO_AD_02_GPIOMUX_IO16,         //GPIO_AD_02   
    63.       0U);
    64.         IOMUXC_SetPinMux(
    65.       IOMUXC_GPIO_AD_01_GPIOMUX_IO15,         //GPIO_AD_01   
    66.       0U);
    67.         IOMUXC_SetPinMux(
    68.       IOMUXC_GPIO_AD_14_GPIOMUX_IO28,         //GPIO_AD_14   
    69.       0U);
    70.                         
    71.         IOMUXC_GPR->GPR26 = ((IOMUXC_GPR->GPR26 &
    72.     (~(IOMUXC_GPR_GPR26_GPIO_SEL_MASK)))      /* Mask bits to zero which are setting */
    73.       | IOMUXC_GPR_GPR26_GPIO_SEL(0x00U)      /* Select GPIO1 or GPIO2: 0x00U */
    74.     );
    75.   IOMUXC_SetPinConfig(
    76.       IOMUXC_GPIO_09_LPUART1_RXD,             /* GPIO_09 PAD functional properties : */
    77.       0x10A0U);                               /* Slew Rate Field: Slow Slew Rate
    78.                                                  Drive Strength Field: R0/4
    79.                                                  Speed Field: fast(150MHz)
    80.                                                  Open Drain Enable Field: Open Drain Disabled
    81.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
    82.                                                  Pull / Keep Select Field: Keeper
    83.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
    84.                                                  Hyst. Enable Field: Hysteresis Disabled */
    85.   IOMUXC_SetPinConfig(
    86.       IOMUXC_GPIO_10_LPUART1_TXD,             /* GPIO_10 PAD functional properties : */
    87.       0x10A0U);                               /* Slew Rate Field: Slow Slew Rate
    88.                                                  Drive Strength Field: R0/4
    89.                                                  Speed Field: fast(150MHz)
    90.                                                  Open Drain Enable Field: Open Drain Disabled
    91.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
    92.                                                  Pull / Keep Select Field: Keeper
    93.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
    94.                                                  Hyst. Enable Field: Hysteresis Disabled */
    95.   IOMUXC_SetPinConfig(
    96.       IOMUXC_GPIO_11_GPIOMUX_IO11,            /* GPIO_11 PAD functional properties : */
    97.       0x70A0U);                               /* Slew Rate Field: Slow Slew Rate
    98.                                                  Drive Strength Field: R0/4
    99.                                                  Speed Field: fast(150MHz)
    100.                                                  Open Drain Enable Field: Open Drain Disabled
    101.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
    102.                                                  Pull / Keep Select Field: Pull
    103.                                                  Pull Up / Down Config. Field: 47K Ohm Pull Up
    104.                                                  Hyst. Enable Field: Hysteresis Disabled */
    105.                                                                                                                                                                                                 
    106.         //add tm1638
    107.         IOMUXC_SetPinConfig(
    108.       IOMUXC_GPIO_AD_02_GPIOMUX_IO16,         //GPIO_AD_02
    109.       0x70A0U);
    110.         IOMUXC_SetPinConfig(
    111.       IOMUXC_GPIO_AD_01_GPIOMUX_IO15,         //GPIO_AD_01  
    112.       0x70A0U);
    113.         IOMUXC_SetPinConfig(
    114.       IOMUXC_GPIO_AD_14_GPIOMUX_IO28,         //GPIO_AD_14   
    115.       0x70A0U);                        
    116. }

    117. /***********************************************************************************************************************
    118. * EOF
    119. **********************************************************************************************************************/
    复制代码

        2.2、tm1638.h

    1. #ifndef _TM1638_H_
    2. #define _TM1638_H_

    3. #include "clock_config.h"
    4. #include "fsl_common.h"
    5. #include "fsl_gpio.h"

    6. #define        DATA_COMMAND        0X40
    7. #define        DISP_COMMAND        0x80
    8. #define        ADDR_COMMAND        0XC0

    9. #define TM1638_GPIO                         GPIO1

    10. #define TM1638_DIO_PIN                                 (15U)                        //GPIO_AD_01
    11. #define TM1638_CLK_PIN                                 (16U)                        //GPIO_AD_02
    12. #define TM1638_STB_PIN                                 (28U)                        //GPIO_AD_14

    13. #define DIO_L() GPIO_PinWrite(TM1638_GPIO, TM1638_DIO_PIN, 0)
    14. #define DIO_H() GPIO_PinWrite(TM1638_GPIO, TM1638_DIO_PIN, 1)

    15. #define CLK_L() GPIO_PinWrite(TM1638_GPIO, TM1638_CLK_PIN, 0)
    16. #define CLK_H() GPIO_PinWrite(TM1638_GPIO, TM1638_CLK_PIN, 1)

    17. #define STB_L() GPIO_PinWrite(TM1638_GPIO, TM1638_STB_PIN, 0)
    18. #define STB_H() GPIO_PinWrite(TM1638_GPIO, TM1638_STB_PIN, 1)

    19. void init_tm1638(void);
    20. void TM1638_Disp(char* dat);
    21. void tm1638_writeallLED(uint8_t LED_flag);
    22. uint8_t tm1638_readkey(void);

    23. #endif

    复制代码

        2.3、main.c
    1. int main(void)
    2. {
    3.         uint8_t dsp[8];
    4.         uint8_t i=0;
    5.         uint32_t js;
    6.         uint8_t key=0;
    7.     /* Define the init structure for the output LED pin*/
    8.     gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};

    9.     /* Board pin, clock, debug console init */
    10.     BOARD_ConfigMPU();
    11.     BOARD_InitPins();
    12.     BOARD_BootClockRUN();
    13.     BOARD_InitDebugConsole();

    14.     /* Print a note to terminal. */
    15.     PRINTF("\r\n GPIO Driver example\r\n");
    16.     PRINTF("\r\n The LED is blinking.\r\n");

    17.     /* Init output LED GPIO. */
    18.     GPIO_PinInit(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, &led_config);
    19.                
    20.                 init_tm1638();
    21.                
    22.                 for(i=0;i<8;i++)
    23.                 {
    24.                         dsp[i]=0;
    25.                 }
    26.                

    27.     while (1)
    28.     {
    29.                         key=tm1638_readkey();
    30.                         if(key!=0)
    31.                         {
    32.                                 PRINTF("key=0x%x \r\n",key);
    33.                         }
    34.                         TM1638_Disp(dsp);
    35.                         tm1638_writeallLED(i++);
    36.                         js++;
    37.                         if(js>9999)
    38.                         {
    39.                                 js=0;
    40.                         }
    41.                         dsp[4]=js/1000;
    42.                         dsp[5]=(js%1000)/100;
    43.                         dsp[6]=((js%1000)%100)/10;
    44.                         dsp[7]=((js%1000)%100)%10;
    45.         SDK_DelayAtLeastUs(100000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
    46. #if (defined(FSL_FEATURE_IGPIO_HAS_DR_TOGGLE) && (FSL_FEATURE_IGPIO_HAS_DR_TOGGLE == 1))
    47.         GPIO_PortToggle(EXAMPLE_LED_GPIO, 1u << EXAMPLE_LED_GPIO_PIN);
    48.                                 
    49. #else
    50.         if (g_pinSet)
    51.         {
    52.             GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 0U);
    53.             g_pinSet = false;
    54.         }
    55.         else
    56.         {
    57.             GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 1U);
    58.             g_pinSet = true;
    59.         }
    60. #endif /* FSL_FEATURE_IGPIO_HAS_DR_TOGGLE */
    61.     }
    62. }
    复制代码

       
        2.4、引脚初始化部分
       
    1. void BOARD_InitPins(void) {
    2.   CLOCK_EnableClock(kCLOCK_Iomuxc);           /* iomuxc clock (iomuxc_clk_enable): 0x03U */

    3.   IOMUXC_SetPinMux(
    4.       IOMUXC_GPIO_09_LPUART1_RXD,             /* GPIO_09 is configured as LPUART1_RXD */
    5.       0U);                                    /* Software Input On Field: Input Path is determined by functionality */
    6.   IOMUXC_SetPinMux(
    7.       IOMUXC_GPIO_10_LPUART1_TXD,             /* GPIO_10 is configured as LPUART1_TXD */
    8.       0U);                                    /* Software Input On Field: Input Path is determined by functionality */
    9.   IOMUXC_SetPinMux(
    10.       IOMUXC_GPIO_11_GPIOMUX_IO11,            /* GPIO_11 is configured as GPIOMUX_IO11 */
    11.       0U);                                    /* Software Input On Field: Input Path is determined by functionality */
    12.   //add tm1638
    13.         IOMUXC_SetPinMux(
    14.       IOMUXC_GPIO_AD_02_GPIOMUX_IO16,         //GPIO_AD_02   
    15.       0U);
    16.         IOMUXC_SetPinMux(
    17.       IOMUXC_GPIO_AD_01_GPIOMUX_IO15,         //GPIO_AD_01   
    18.       0U);
    19.         IOMUXC_SetPinMux(
    20.       IOMUXC_GPIO_AD_14_GPIOMUX_IO28,         //GPIO_AD_14   
    21.       0U);
    22.                         
    23.         IOMUXC_GPR->GPR26 = ((IOMUXC_GPR->GPR26 &
    24.     (~(IOMUXC_GPR_GPR26_GPIO_SEL_MASK)))      /* Mask bits to zero which are setting */
    25.       | IOMUXC_GPR_GPR26_GPIO_SEL(0x00U)      /* Select GPIO1 or GPIO2: 0x00U */
    26.     );
    27.   IOMUXC_SetPinConfig(
    28.       IOMUXC_GPIO_09_LPUART1_RXD,             /* GPIO_09 PAD functional properties : */
    29.       0x10A0U);                               /* Slew Rate Field: Slow Slew Rate
    30.                                                  Drive Strength Field: R0/4
    31.                                                  Speed Field: fast(150MHz)
    32.                                                  Open Drain Enable Field: Open Drain Disabled
    33.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
    34.                                                  Pull / Keep Select Field: Keeper
    35.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
    36.                                                  Hyst. Enable Field: Hysteresis Disabled */
    37.   IOMUXC_SetPinConfig(
    38.       IOMUXC_GPIO_10_LPUART1_TXD,             /* GPIO_10 PAD functional properties : */
    39.       0x10A0U);                               /* Slew Rate Field: Slow Slew Rate
    40.                                                  Drive Strength Field: R0/4
    41.                                                  Speed Field: fast(150MHz)
    42.                                                  Open Drain Enable Field: Open Drain Disabled
    43.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
    44.                                                  Pull / Keep Select Field: Keeper
    45.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
    46.                                                  Hyst. Enable Field: Hysteresis Disabled */
    47.   IOMUXC_SetPinConfig(
    48.       IOMUXC_GPIO_11_GPIOMUX_IO11,            /* GPIO_11 PAD functional properties : */
    49.       0x70A0U);                               /* Slew Rate Field: Slow Slew Rate
    50.                                                  Drive Strength Field: R0/4
    51.                                                  Speed Field: fast(150MHz)
    52.                                                  Open Drain Enable Field: Open Drain Disabled
    53.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
    54.                                                  Pull / Keep Select Field: Pull
    55.                                                  Pull Up / Down Config. Field: 47K Ohm Pull Up
    56.                                                  Hyst. Enable Field: Hysteresis Disabled */
    57.                                                                                                                                                                                                 
    58.         //add tm1638
    59.         IOMUXC_SetPinConfig(
    60.       IOMUXC_GPIO_AD_02_GPIOMUX_IO16,         //GPIO_AD_02
    61.       0x70A0U);
    62.         IOMUXC_SetPinConfig(
    63.       IOMUXC_GPIO_AD_01_GPIOMUX_IO15,         //GPIO_AD_01  
    64.       0x70A0U);
    65.         IOMUXC_SetPinConfig(
    66.       IOMUXC_GPIO_AD_14_GPIOMUX_IO28,         //GPIO_AD_14   
    67.       0x70A0U);                        
    68. }
    复制代码



        三、程序运行
       
        3.1、模块显示
        101.gif


        3.2、按下按键串口输出相应按键置
        004.png




        四、芯片端口的GPIO问题
       
        RT1010芯片的GPIO端口总的有GPIO1,GPIO0和GPIO5,通过下图可以看出(GPIO00~GPIO13)和(GPIO_AD_00~GPIO_AD_14)属于GPIO1。刚开始在使用GPIO_AD_XX口作为GPIO口时,花费了一些时间。
        007.png
       


    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-3-31 13:37
  • 签到天数: 94 天

    [LV.6]常住居民II

    1740

    主题

    3293

    帖子

    0

    金豆

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16346
    最后登录
    2021-4-12
    发表于 4 天前 | 显示全部楼层
    签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-11-11 16:17
  • 签到天数: 2 天

    [LV.1]初来乍到

    4

    主题

    139

    帖子

    0

    金豆

    中级会员

    Rank: 3Rank: 3

    积分
    482
    最后登录
    2021-4-9
    发表于 4 天前 | 显示全部楼层
    高级,大佬带我
    签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:50
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    0

    主题

    62

    帖子

    0

    金豆

    中级会员

    Rank: 3Rank: 3

    积分
    201
    最后登录
    2021-4-12
    发表于 4 天前 | 显示全部楼层
    学习了
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:28
  • 签到天数: 78 天

    [LV.6]常住居民II

    1

    主题

    181

    帖子

    0

    金豆

    中级会员

    Rank: 3Rank: 3

    积分
    368
    最后登录
    2021-4-12
    发表于 4 天前 | 显示全部楼层
    虽然没看懂,但是我知道挺牛逼
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:44
  • 签到天数: 901 天

    [LV.10]以坛为家III

    8

    主题

    2214

    帖子

    2

    金豆

    金牌会员

    Rank: 6Rank: 6

    积分
    5428
    最后登录
    2021-4-12
    发表于 4 天前 | 显示全部楼层
    支持支持
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2021-4-13 03:59 , Processed in 0.092107 second(s), 18 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表