LED跑马灯最为很经典实验,作为初学者的我来说,是对熟悉GPIO操作很重要一环。
在本实验中,我采用控制器的systick时钟计数器中断,实现1秒跳变LED跑马灯程序。 跑马灯实验室LED0~LED3灯每隔1S来回跳动。下载完成程序后,按S1按键RESET一下开发板即可启动程序。
本实验我使用软件开发环境是Keil MDK软件。如何配置软件清参详xld0932写的【东芝TT_M3HQ开发板试用体验】02.开箱测试和《【东芝TT_M3HQ开发板试用体验】03.新建工程 》帖子中。
其中我再重点强调一下, 为了CMSIS-DAP Debugger接口调试,我领取开发板时,J是将J6的短接,J5断开的;需要改变一下,将J6断开,J5短接后,电脑成功识别到了CMSIS-DAP Debugger。J5、J6跳线如下图所示位置。

至于Keil MDK软件配置、芯片的支持包和例程范例上文提到帖子中都有提供。
本文经过学习范例,本试验实在GPIO范例中修改完成。本人初学者一枚,水平有限,如有错误,望大家见谅。
本工程文件如下:

2019-9-8 15:00 上传
点击文件名下载附件
跑马灯视频压缩包

2019-9-8 15:19 上传
点击文件名下载附件
下文附上主程序mian.c内容。
/** ******************************************************************************* * @file main.c * @brief GPIO LED Sample Application. * @version V1.0.1.3 * $Date:: 2018-09-21 11:31:35 #$ * * DO NOT USE THIS SOFTWARE WITHOUT THE SOFTWARE LISENCE AGREEMENT. * * (C)Copyright TOSHIBA MICROELECTRONICS CORPORATION 2017 All rights reserved ******************************************************************************* */ #ifdef __cplusplus extern "C" { #endif /** * @addtogroup Sample_Appli * @{ */ /** * @addtogroup GPIO_LED * @{ */ /** * @defgroup MAIN_PRIVATE MAIN Private * @brief MAIN Private Group. * @{ */ /*------------------------------------------------------------------------------*/ /* Includes */ /*------------------------------------------------------------------------------*/ #include "txz_sample_def.h" #include "bsp.h" #include "bsp_sw.h" #include "bsp_led.h" /*------------------------------------------------------------------------------*/ /* Enumerated Type Definition */ /*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/ /* Structure Definition */ /*------------------------------------------------------------------------------*/ /*----------------------------------*/ /** * @brief Instance Information. */ /*----------------------------------*/ typedef struct { sw_t sw[(uint32_t)BSP_PSW_MAX]; /*!< Application :Push SW */ led_t led[(uint32_t)BSP_LED_MAX]; /*!< Application :LED */ gpio_t gpio_obj; /*!< Application :GPIO. */ } instance_t; /*------------------------------------------------------------------------------*/ /* Private Member */ /*------------------------------------------------------------------------------*/ static instance_t instance; /*!< Instance. */ uint32_t i = 5,t = 0; /*------------------------------------------------------------------------------*/ /* Configuration */ /*------------------------------------------------------------------------------*/ #define MAIN_NULL ((void *)0) /*!< NULL. */ /*------------------------------------------------------------------------------*/ /* Private Function */ /*------------------------------------------------------------------------------*/ static TXZ_Result application_initialize(void); /*--------------------------------------------------*/ /** * @brief Application Initialize. * @param - * @return Result. * @retval TXZ_SUCCESS :Success. * @retval TXZ_ERROR :Failure. * @note - */ /*--------------------------------------------------*/ static TXZ_Result application_initialize(void) { TXZ_Result result = TXZ_SUCCESS; /*----------------------*/ /* LED */ /*----------------------*/ { uint32_t i; led_t *p_led = MAIN_NULL; for (i=0; i<(uint32_t)BSP_LED_MAX; i++) { p_led = &instance.led[i]; p_led->init.id = (uint32_t)p_led; p_led->init.p_gpio = bsp_get_gpio_instance_address(); p_led->init.port.group = bsp_get_gpio_group_led((BSPLed)(i)); p_led->init.port.num = bsp_get_gpio_num_led((BSPLed)(i)); p_led->init.blink.func = TXZ_DISABLE; p_led->init.blink.interval.on = 0; p_led->init.blink.interval.off = 0; p_led->init.state = LED_STATE_OFF; led_initialize(p_led); } } return (result); } /** * @} */ /* End of group MAIN_PRIVATE */ /*------------------------------------------------------------------------------*/ /* Public Function */ /*------------------------------------------------------------------------------*/ void irq_systick(void); /*--------------------------------------------------*/ /** * @brief Main Function. * @param - * @retval - * @note - */ /*--------------------------------------------------*/ int main(void) { uint32_t period; // Period for SYSTICK /*----------------------*/ /* BSP initialize */ /*----------------------*/ bsp_initialize(); /*----------------------*/ /* Initialize */ /*----------------------*/ /*--- application ---*/ if (application_initialize() != TXZ_SUCCESS) { } /*----------------------*/ /* Main Processing */ /*----------------------*/ /* Period for 10msec SYSTICK */ SystemCoreClockUpdate(); period = SystemCoreClock/5; if (SysTick_Config(period )) /* systick interrupt cycle setting */ { } NVIC_EnableIRQ(SysTick_IRQn); /* systick interrupt enable */ /* dummy loop */ while (1){ __NOP(); } } /*--------------------------------------------------*/ /** * @brief Systick IRQ. * @param - * @return - * @retval - * @note This function is called BSP. */ /*--------------------------------------------------*/ void irq_systick(void) { led_t *p_led0 = MAIN_NULL; led_t *p_led1 = MAIN_NULL; led_t *p_led2 = MAIN_NULL; led_t *p_led3 = MAIN_NULL; // gpio_pinstate_t val = GPIO_PIN_SET; p_led0 = &instance.led[0]; p_led1 = &instance.led[1]; p_led2 = &instance.led[2]; p_led3 = &instance.led[3]; if(i%20 == 5) { led_turn_on(p_led0); led_turn_off(p_led1); led_turn_off(p_led2); led_turn_off(p_led3); } if(i%20 == 10) { led_turn_on(p_led1); led_turn_off(p_led0); led_turn_off(p_led2); led_turn_off(p_led3); } if(i%20 == 15) { led_turn_on(p_led2); led_turn_off(p_led0); led_turn_off(p_led1); led_turn_off(p_led3); } if(i%20 == 0) { led_turn_on(p_led3); led_turn_off(p_led0); led_turn_off(p_led1); led_turn_off(p_led2); } i++; } #ifdef DEBUG /*--------------------------------------------------*/ /** * @brief Failure Assert. * @note for debug */ /*--------------------------------------------------*/ void assert_failed(char *file, int32_t line) { while (1) { __nop(); } } #endif /** * @} */ /* End of group GPIO_LED */ /** * @} */ /* End of group Sample_Appli */ #ifdef __cplusplus } #endif /* __cplusplus */
复制代码
继续阅读本篇相关更多标签
全部回复 0

评测文章
热帖
大家都在看的技术资料
举报
内容系网友发布,其中涉及到安全隐患的内容系网友个人行为,不代表面包板社区观点
关闭
站长推荐
/3


-
返回顶部
-
工具栏