当前位置: 首页 > wzjs >正文

html5手机网站制作教程多用户版商城系统

html5手机网站制作教程,多用户版商城系统,网红营销的作用,幼教资源网网站开发策划书在嵌入式开发的奇妙旅程中,GPIO(通用输入输出接口)作为芯片与外部世界交互的重要桥梁,扮演着不可或缺的角色。从简单的 LED 灯控制,到复杂的外设通信,GPIO 的灵活运用为开发者打开了无限可能的大门。自本章…

在嵌入式开发的奇妙旅程中,GPIO(通用输入输出接口)作为芯片与外部世界交互的重要桥梁,扮演着不可或缺的角色。从简单的 LED 灯控制,到复杂的外设通信,GPIO 的灵活运用为开发者打开了无限可能的大门。自本章开始,正式开始用代码控制AS32x601各外设完成功能配置。

需要注意的是,AS32X601提供了8组GPIO,其中GPIOA~GPIOG寄存器操作完全一致,但在使用GPIOH的时候,寄存器列表中间少了一个32位寄存器,因此在使用过程中容易造成误操作,我们在驱动库中已经做了映射,若想要自行操作寄存器进行控制,需要格外注意这一点。

另外,在芯片的IO复用表中,其默认功能并非全部都是GPIO,还包含了MUL类型,使用此类型IO时,需要先将复用配置为GPIO功能,在完成接下来的操作。

硬件设计

AS32x601评估板板载3颗LED灯用于IO输出评估,原理图如下:

根据上图可以知道,LED“正极”接电源,“负极”接GPIOG三个引脚,当IO拉低时,LED亮,IO输出高时,LED灭,据此设计控制逻辑。

程序设计

操作流程

  1. 开led对应IO时钟

  2. 检查对应引脚默认配置,是否需要复用调整

  3. 初始化gpio结构体

  4. 控制gpio输出

主要代码分析

复制上一小节的工程模板,在工程目录下新建Bsp文件夹用于存放led相关控制代码,在IAR工程界面添加led.c和led.h文件。

在led.c文件中添加相应头文件,之后编写led初始化代码。

  1. /*
  2.  * Function:        User_LED_Init
  3.  * Description:     Configure LED GPIO.
  4.  * Param:           None.                 
  5.  * Return:          None.
  6.  */
  7. void User_LED_Init()
  8. {
  9.     GPIO_InitTypeDef  GPIO_InitStructure;
  10.     
  11.     GPIOG_CLK_ENABLE();
  12.    
  13.     /* GPIOB Configure */
  14.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15; 
  15.     GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_OUT;
  16.     GPIO_InitStructure.GPIO_OType     = GPIO_Out_PP;
  17.     GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_9mA;
  18.     
  19.     GPIO_Init(GPIOG, &GPIO_InitStructure);  
  20. }

在上述代码清单中,根据电路原理图,led与mcu的PG10、14、15引脚相连,因此我们首先打开GPIOG的时钟使能;

之后初始化gpio结构体,通过或操作同时对三个引脚进行初始化,配置推挽输出,同时配置io输出能力位9mA。

接下来,我们用宏定义的形式编写LED的控制函数。

  1. #define LED1_ON()       GPIO_WriteBits(GPIOG, GPIO_Pin_15, GPIO_OCtrl_Vol)
  2. #define LED1_OFF()      GPIO_WriteBits(GPIOG, GPIO_Pin_15, GPIO_OCtrl_Voh)
  3. #define LED1_TOGGLE()   GPIO_ToggleBits(GPIOG, GPIO_Pin_15)
  4. #define LED2_ON()       GPIO_WriteBits(GPIOG, GPIO_Pin_14, GPIO_OCtrl_Vol)
  5. #define LED2_OFF()      GPIO_WriteBits(GPIOG, GPIO_Pin_14, GPIO_OCtrl_Voh)
  6. #define LED2_TOGGLE()   GPIO_ToggleBits(GPIOG, GPIO_Pin_14)
  7. #define LED3_ON()       GPIO_WriteBits(GPIOG, GPIO_Pin_10, GPIO_OCtrl_Vol)
  8. #define LED3_OFF()      GPIO_WriteBits(GPIOG, GPIO_Pin_10, GPIO_OCtrl_Voh)
  9. #define LED3_TOGGLE()   GPIO_ToggleBits(GPIOG, GPIO_Pin_10)

在led.h文件中添加如上代码,AS32驱动库中包含了引脚控制输出函数以及引脚翻转控制函数,通过宏的形式完成led控制名称的转换,便于理解。

此时,代码并不算完成,之后我们需要查询芯片设计手册中,GPIOG所在的总线,在系统时钟配置函数中需要打开对应总线时钟,具体方式参考上一小节。

最后,编写主函数代码,控制三个led灯流水闪烁。

  1. void main()
  2. {
  3.     Systemclock_Init();
  4.     delay_init(SMU_ClocksStruct.AXIBus0_Frequency/1000000);
  5.     /* Initialize LED */
  6.     User_LED_Init();
  7.     while(1)
  8.     {
  9.             LED1_ON();LED2_OFF();LED3_OFF();
  10.        delay_ms(100);
  11.        LED1_OFF();LED2_ON();LED3_OFF();
  12.        delay_ms(100);
  13.        LED1_OFF();LED2_OFF();LED3_ON();
  14.        delay_ms(100);
  15.     }
  16. }

补充

在这个代码中调用了一个延时函数,该函数位于库文件System目录下,利用RISCV的CSR定时器,可以理解为系统定时器编写的精确延时函数,因此需要对此函数进行初始化,并传入当前系统时钟。

  1. delay_init(SMU_ClocksStruct.AXIBus0_Frequency/1000000);

SMU_ClocksStruct.AXIBus0_Frequency就是在系统时钟初始化函数中最后一个函数调用所读回来的所有总线时钟,由于Core时钟与AXIBus0同频,所以在此处就利用该参数进行延时初始化,除1000000的作用是,延时计算的时候单位为MHz,所以把后边的数量级给除掉。

http://www.dtcms.com/wzjs/541316.html

相关文章:

  • 保定网站建设服务平台企业电话号码大全
  • 网站版权信息修改wordpress 不显示全文
  • 广东建设工程质量安全协会网站做网站客户总是要退款
  • 做软件需要网站微信群 网站建设
  • 手机免费建站平台下载网站编辑专题怎么做
  • 彩虹云商城网站网站开发流程进度表
  • 如何进入谷歌网站绵阳新区大建设
  • 莆田网站建站建设企业内部网站制作模板
  • 网站建设兼职平台鹏鸿生态板官方网站开发区代理
  • 分局网站建设科技尽头
  • 中国诚乡建设部网站手机网站自适应屏幕
  • 中材矿山建设有限公司网站上海迪士尼乐园官网
  • 做设计有哪些免费网站微信小程序注册方式选哪个
  • 网站后台 灰色wordpress商城加导购
  • 学摄影的网站有哪些佛山做网络优化的公司
  • 做网站认证对网站有什么好处便利的合肥网站建设
  • 吉安市建设技术培训中心网站建设部网站水利设计资质
  • 好的网站建设公司了解网站开发 后台流程
  • 删除织梦综合网站百度企业网站建设
  • 2023网站分享注册营业执照网上申请入口
  • 怎么区分营销型网站美容手机网站模板
  • 网站建设报价单及项目收费明细表百度一下官方网
  • 安徽网站建设公司wordpress怎么把设置菜单去除
  • 潍坊企业免费建站广州网站排名优化服务
  • 绍兴网站seo浙江省外贸公司排名
  • 定制网站大概多少钱网站需求分析报告
  • 如今做哪些网站能致富柚段子wordpress
  • 网站ico添加创意创新设计方案
  • ueeshop建站费用销售推广的方法都有哪些
  • 南昌城市旅游网站建设53货源网下载app