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

来个网站奖励自己单页网站怎么制作教程

来个网站奖励自己,单页网站怎么制作教程,程建网,中国网站排名查询在嵌入式开发的奇妙旅程中,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/a/420191.html

相关文章:

  • 网站建设费用做网站和app哪个简单
  • 什么网站可以做直播wordpress 多个域名
  • Windows版本PostgreSQL定时备份
  • 网站运营维护方案苏州知名网站建设建站公司
  • 空壳网站主体注销浙江省建设监理管理协会网站
  • Webpack5 第五节
  • 网站的建立设计app的软件
  • “优化编码(Z)” 带来更稳定?还是带来不稳定?- Task.Delay引发的思考
  • 医疗网站前置审批广州制作网站公司简介
  • 帮人做钓鱼网站以及维护建设工程招标专业网站
  • 河南基安建设集团有限公司网站江苏常州网站建设
  • 小视频网站源码不良网站进入窗口
  • 分割数组得到最小绝对差
  • openGauss数据库自动安装脚本
  • GSM8K:评估大模型数学推理能力的关键数据集
  • 网站建立公司百度站长平台h5网站
  • P1989 三元环计数
  • asp 公司网站建设网站培训班
  • 郴州网站制作公司电话网站下拉广告
  • 营销型网站建设的概念WordPress网站封装app教程
  • 天津建设厅网站导航网站怎么赚钱
  • 做带支付功能的网站网站和软件建站
  • 广西桂林建设局网站手游排行榜
  • 【QT第二章】信号与槽
  • 网站建设站点做网站通过什么赚钱
  • 济宁网站建设是什么意思wordpress头像上传插件
  • 做影视网站什么cms好用吗网站配置域名这样做
  • 【Spring】Spring Boot 自动配置
  • 青浦网站优化前程无忧做网站多少钱
  • 常熟港口建设费申报网站怎么网站建设