第五章 国产MCU 雅特力AT32F403A 基于v2库的点灯实验,位带操作控制,库函数控制

目录

概述

硬件

软件

        初始化gpio 

                相关代码:

        库函数操作

                相关代码:

         位带操作 

                相关代码:

最后


概述

        本文主要是使用AT32F403A开发板,基于V2库的点灯程序。

        工程建立、调试工具配置在前面章节有详细介绍。

        Gpio的操作使用库函数、位带操作。


硬件

          硬件方面使用的是参考官方AT32F437 SURF板子而设计的一个AT32F403A开发板,板子上的芯片是AT32F403AVGT7的型号,开发板上面还板载了一个atlink-ez的仿真器,atlink-ez除了可以在线仿真和下载之外还有一个串口的功能,硬件上是通过跳线帽接到了MCU的串口1,pa9/10上面。

         如下图是开发板pcb图,以及硬件资源。(左边上角的就是atlink-ez,用usb线接到pc即可):


         如下是实物图:

         本章的主要内容是把板子上面的RGB_LED点亮,相关原理图部分如下:

软件

        项目的建立是基于上一章建立的工程步骤,然后再添加一个led.c文件用于放led的相关代码。

        通过上面的AT32F403A开发板原理图的LED部分可以知道,开发板上的RGB_LED是接到芯片的PC3/4/5上的,当这三个IO输出低电平的时候则RGB_LED灯会亮对应的颜色,RGB是三基色,可以通过三基色实现各种想要的颜色。比如,全拉低的时候,那就是白色。

        初始化gpio 

                 首先初始化PC3/4/5的gpio,设置为推挽输出模式。

               相关代码:


        库函数操作

                通过库函数void gpio_bits_reset(gpio_type *gpio_x, uint16_t pins)输出低电平,通过void gpio_bits_set(gpio_type *gpio_x, uint16_t pins)来输出高电平。在while中先拉低1s,然后再拉高1s。

               相关代码:

           编译后下载到开发板,开发板上的RGB_LED是白色并且每秒翻转一次,程序ok。   


         位带操作 

                利用位带操作,可以使用普通的加载/存储操作来对单一比特进行读写访问。在 Cortex™-M4F 中提供了 两个位带区:SRAM 最低 1M 字节空间和外设区间的最低 1M 字节空间。这两个区中的地址除了可以像普通存储器一样访问外,还可以通过它们各自的位带别名区来快捷访问这两个区中任意地址的任意比特位, 位带别名区将位带区每个比特膨胀成一个 32 位的字。当你访问位带别名区的一个地址时,等同于直接访问位带区的一个比特位。

                每个比特膨胀成一个32位字(4字节),一个字节就膨胀成32字节。利用位带操作就可以像51一样,gpio等于1/0来控制IO的拉高拉低。

        

                 

                支持位带操作的两个内存区的地址范围为:

                                         SRAM 区中的最低 1M 字节:0x20000000~0x200F_FFFF

                                         外设区间的最低 1M 字节: 0x40000000~0x400F_FFFF

                 对于 SRAM 位带区的某个比特,如果所在字节地址为 A,位序号为 n(0<=n<=7),则该比特在别名区的地址为:

                                          AliasAddr = 0x22000000+ (A-0x20000000)*32+n*4

                 对于外设区间位带区的某个比特,如果所在字节地址为 A,位序号为 n(0<=n<=7),则该比特在别名区的地址为:

                                           AliasAddr = 0x42000000+ (A-0x40000000)*32+n*4

                

                相关代码:

                         这里位带操作只是对输出/输入寄存器的操作,还是需要先把io给初始化好了才能正确输出。

                         位带操作地址计算:

                         设置宏定义:

                         Main函数:

             编译后下载到开发板,开发板上的RGB_LED是白色(左下角的灯)并且每秒翻转一次,程序ok。(如下图)


最后

           有问题的可加qq群技术交流,同时项目工程已经上传到qq群里面,可从里面获取。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值