2395|1

79

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

【GD32L233C-START评测】测评之二:库函数解析,GPIO点灯 [复制链接]

GD32L23X库函数:片上资源丰富,全部给出API接口,相对于寄存器编程,大大降低开发难度。

 

 

先给个点灯测试:

原理图:LED属于关电流驱动,可以测评GPIO驱动能力。根于属于手册,GPIO可以拉灌25ma电流。

GPIO初始化:

  • systick_config();
  • /* enable the LED GPIO clock */
  • rcu_periph_clock_enable(RCU_GPIOA);
  • rcu_periph_clock_enable(RCU_GPIOC);
  • gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7 | GPIO_PIN_8);
  • gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8);
  • gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6 | GPIO_PIN_7);
  • gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7);
  • /* reset LED GPIO pin */
  • gpio_bit_reset(GPIOA, GPIO_PIN_7 | GPIO_PIN_8);
  • gpio_bit_reset(GPIOC, GPIO_PIN_6 | GPIO_PIN_7);

关键配置:

gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8);

   

延时有:SysTick 产生 1ms,解析:

     Sys-系统,Tick-滴答声,系统滴答滴答很形象地表示了它是一个系统节拍器。SysTick 是一个集成在Cortex内核里的24位的倒计数定时器,当计到0时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。 SysTick的作用。 SysTick主要有以下几个作用:

1、产生操作系统的时钟节拍; 当RTOS以并行的架构处理任务,单一任务的崩溃并不会牵连到整个系统。这样用户出于可靠性的考虑可能就会基于RTOS来设计自己的应用程序。这样SYSTICK存在的意义就是提供必要的时钟节拍,为RTOS的任务调度提供一个有节奏的“心跳”。

2、便于不同处理器之间程序移植 因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简。

3、作为一个闹铃测量时间 可以用作闹钟,作为启动一个特定任务的时间依据。它作为一个闹铃,用于测量时间。要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。

  • #include "gd32l23x.h"
  • #include "systick.h"
  • volatile static uint32_t delay;
  • /*!
  • \brief configure systick
  • \param[in] none
  • \param[out] none
  • \retval none
  • */
  • void systick_config(void)
  • {
  • /* setup systick timer for 1000Hz interrupts */
  • if(SysTick_Config(SystemCoreClock / 1000U)) {
  • /* capture error */
  • while(1) {
  • }
  • }
  • /* configure the systick handler priority */
  • NVIC_SetPriority(SysTick_IRQn, 0x00U);
  • }
  • /*!
  • \brief delay a time in milliseconds
  • \param[in] count: count in milliseconds
  • \param[out] none
  • \retval none
  • */
  • void delay_1ms(uint32_t count)
  • {
  • delay = count;
  • while(0U != delay) {
  • }
  • }
  • /*!
  • \brief delay decrement
  • \param[in] none
  • \param[out] none
  • \retval none
  • */
  • void delay_decrement(void)
  • {
  • if(0U != delay) {
  • delay--;
  • }
  • }

 流水灯改进

  • /* turn on LED1, turn off LED4 */
  • gpio_bit_set(GPIOA, GPIO_PIN_7);
  • gpio_bit_reset(GPIOC, GPIO_PIN_7);
  • /* turn on LED2, turn off LED1 */
  • gpio_bit_set(GPIOA, GPIO_PIN_8);
  • gpio_bit_reset(GPIOA, GPIO_PIN_7);
  • delay_1ms(500);
  • /* turn on LED3, turn off LED2 */
  • gpio_bit_set(GPIOC, GPIO_PIN_6);
  • gpio_bit_reset(GPIOA, GPIO_PIN_8);
  • delay_1ms(500);
  • /* turn on LED4, turn off LED3 */
  • gpio_bit_set(GPIOC, GPIO_PIN_7);
  • gpio_bit_reset(GPIOC, GPIO_PIN_6);
  • delay_1ms(500);
  • gpio_bit_reset(GPIOC, GPIO_PIN_7);
  • delay_1ms(500);
  • gpio_bit_set(GPIOA, GPIO_PIN_7);
  • gpio_bit_set(GPIOA, GPIO_PIN_8);
  • gpio_bit_set(GPIOC, GPIO_PIN_6);
  • gpio_bit_set(GPIOC, GPIO_PIN_7);
  • delay_1ms(500);
  • gpio_bit_reset(GPIOC, GPIO_PIN_7);
  • gpio_bit_reset(GPIOA, GPIO_PIN_7);
  • gpio_bit_reset(GPIOA, GPIO_PIN_8);
  • gpio_bit_reset(GPIOC, GPIO_PIN_6);
  • delay_1ms(500);
  • gpio_bit_set(GPIOA, GPIO_PIN_7);
  • gpio_bit_set(GPIOA, GPIO_PIN_8);
  • gpio_bit_set(GPIOC, GPIO_PIN_6);
  • gpio_bit_set(GPIOC, GPIO_PIN_7);
  • delay_1ms(500);
  • gpio_bit_reset(GPIOC, GPIO_PIN_7);
  • gpio_bit_reset(GPIOA, GPIO_PIN_7);
  • gpio_bit_reset(GPIOA, GPIO_PIN_8);
  • gpio_bit_reset(GPIOC, GPIO_PIN_6);
  • delay_1ms(500);
  • gpio_bit_set(GPIOA, GPIO_PIN_7);
  • gpio_bit_set(GPIOA, GPIO_PIN_8);
  • gpio_bit_set(GPIOC, GPIO_PIN_6);
  • gpio_bit_set(GPIOC, GPIO_PIN_7);
  • delay_1ms(500);
  • gpio_bit_reset(GPIOC, GPIO_PIN_7);
  • gpio_bit_reset(GPIOA, GPIO_PIN_7);
  • gpio_bit_reset(GPIOA, GPIO_PIN_8);
  • gpio_bit_reset(GPIOC, GPIO_PIN_6);
  • delay_1ms(500);delay_1ms(500);delay_1ms(500);

上视频:


 

 

此帖出自GD32 MCU论坛

最新回复

期待后续:)   详情 回复 发表于 2022-1-18 09:48
点赞 关注
 

回复
举报

2万

帖子

71

TA的资源

管理员

沙发
 

期待后续:)

此帖出自GD32 MCU论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表