工程建立步骤

  • 建立一个文件夹,文件夹的名称就是任务名称,如XX
  • 将test1-gpio文件夹中的内容全部拷贝到XX
  • 通过uVision(或直接点击XX文件夹下的*.uvprojx)打开工程
  • 打开工程文件夹下的main.c文件
  • 修改main函数,其余不动

main函数结构

int main(){Device_Init(); //不要动//添加你的其他初始化代码while(1){//工作循环//添加需要一直需要做的工作代码,如显示等}return 1;
}

可以看出来,主函数的结构和一般嵌入式系统的主函数一样,首先是初始化工作,这里只不过添加了一个Device_Init()函数,一般该函数我们不需要修改,在该函数之后我们要添加一下我们具体工作的初始化工作代码;随后是一个死循环,其中主要放置周期性的、有规范性的或查询等工作,一般我们将显示部分放置其中。另外程序结构还有一部分就是中断,我们所有的模板已经将中断服务功能抽出来放到了ISR.C中了,我们可以在此修改。我们也可以不要模板,直接从main函数的第一行写,这也是可以的。

void Device_Init()
{SetPll();//设置PLL的,不要动//IRQ_Disable();GPIO_Init();//可能有得较多,具体内容根据需要到该函数中设定//IRQ_Init();//SetSysTick();    //PWM_Init();//ADC_Init();//OPA0_Init();//OPA2_Init();//CMP0_Init();    //Uart0_Init();//初始化串口的,数据格式、波特率到此设定//IRQ_Enable();//使能中断的,具体使能哪些中断,可以到该函数中设定
}

Device_Init()一般我们要按需选择,注释掉不需要的。从代码中也可以看出主要涉及的是关于片上设备的选择问题。我们按需修改,并在其下添加片外设备的初始化代码。

查看函数的定义

以查看Device_Init为例,选中函数名Device_Init,右击,出现浮动窗,如下图,选中Go to Defiition of ‘Device_Init’,系统自动跳转到Device_Init

 常用的位操作技巧

//有用的技巧
//将某个变量(或寄存器)PA的i,j位置1:
PA |= ((1<<i)|(1<<j));
//将某个变量(或寄存器)PA的i,j位置0:
PA &= ~((1<<i)|(1<<j));

C语言操作外设:

对目前大部分的MCU来说,操作外设就是对特定的寄存器进行读写操作。一般外设的寄存器被映射到系统存储器空间,它们可以通过指针进行访问。使用微控制器供应商提供的设备驱动,可以简化开发任务,并且增强软件在不同平台之间的可移植性。如果需要直接访问外设寄存器,可以使用以下方法:

1

LK32T102的管脚

LK32T102内部设备功能较多,而管脚较少,所以基本上每一个管脚都是多功能的,基本上可以分为两大类:数字端口和模拟端口两大类,如下图所示:

此信息可以从编程信息手册中查出。

因为管脚功能较多,则一定有用于管脚功能选择的寄存器,这个基本对应着CFGx寄存器,每一个端口涉及32个配置寄存器CFGx(x=0~31),对应32个管脚,但是实际只用到16个。

GPIO口操作

有3个端口,分别为PA,PB,PC,每个端口可以有32条口线,但是实际PA,PB可能只用到16个,PC更少。

2个管脚值寄存器(1个管脚值寄存器PIN(只读)和管脚输出寄存器OUT(读写)),1个管脚输出使能OUTEN,1个管脚置位OUTSET,1个管脚清零OUTCLR

操作的方法有两种:

1)直接操作寄存器   ---->有关定义在SC32F5832.H
如使能PA端口的PA0~PA8可以如下操作:

PA->OUTEN=0x000000FF;

上述代码中PA表示端口PA,OUTEN表示寄存器OUTEN,其他类似

2)借助已定义的宏------>有关定义在GPIO.H

如实现上述代码的同样功能:

PA_OUT_ENABLE(0);
PA_OUT_ENABLE(1);
....
PA_OUT_ENABLE(8);

具体可以查阅GPIO.H,有非常详细的解释。建议直接操作寄存器。

这两个头文件已经包含在模板中了,一般不需要我们过多的设置。

深入系统初始化

在我们的工程模板中,main函数调用了Device_Init();Device_Init()又调用了很多基本设备的初始化工作:

void Device_Init()
{SetPll();//IRQ_Disable();GPIO_Init();IRQ_Init();//SetSysTick();    //PWM_Init();//ADC_Init();//OPA0_Init();//OPA2_Init();//CMP0_Init();    Uart0_Init();// //IRQ_Enable();//
}

上述的意义很明确,一般不需要修改;其中的GPIO_Init()就是关于GPIO的初始化的,我们可以进行基本的初始化工作:

void GPIO_Init()
{//     GPIO_AF_SEL(DIGITAL,PA,8,2);             // PWM1A
//      GPIO_AF_SEL(DIGITAL,PA,9,2);             // PWM2B
//      GPIO_AF_SEL(DIGITAL,PA,10,2);            // PWM2A
//      GPIO_AF_SEL(DIGITAL,PB,13,2);            // PWM0B
//      GPIO_AF_SEL(DIGITAL,PB,14,2);            // PWM0A
//      GPIO_AF_SEL(DIGITAL,PB,15,2);            // PWM1B
//
//      GPIO_AF_SEL(DIGITAL,PA,11,7);            // TIM_CH1
//      GPIO_AF_SEL(DIGITAL,PA,12,7);            // TIM_CH1N
//      GPIO_AF_SEL(DIGITAL,PB,12,4);            // TIM_BKIN
//
//      GPIO_AF_SEL(DIGITAL,PB,2,5);             // PB2
//
//      GPIO_AF_SEL(ANALOGY,PB,11,0);            // ADCB6
//      GPIO_AF_SEL(ANALOGY,PC,13,0);            // ADCB7
//
//      GPIO_AF_SEL(ANALOGY,PA,0,0);             // OPA0P
//
//      GPIO_AF_SEL(ANALOGY,PB,0,0);             // OPA2P
//
//      GPIO_AF_SEL(DIGITAL,PB,8,5);             // TIM_CH2
//      GPIO_AF_SEL(DIGITAL,PB,9,5);             // TIM_CH2N
//      GPIO_AF_SEL(DIGITAL,PC,0,1);             // TIM_CH3
//      GPIO_AF_SEL(DIGITAL,PB,1,6);             // TIM_CH3N
//
//      GPIO_AF_SEL(DIGITAL,PC,6,3);             // PC6
//      GPIO_AF_SEL(DIGITAL,PA,15,3);            // PA15GPIO_AF_SEL(DIGITAL, PA, 2, 1);          // PA2 GPIO_AF_SEL(DIGITAL, PA, 3, 1);          // PA3 //PB0 - PB7 -> LED1 - LED8GPIO_AF_SEL(DIGITAL, PB, 0, 0);       // LED1 - D9GPIO_AF_SEL(DIGITAL, PB, 1, 0);       // LED2 - D10GPIO_AF_SEL(DIGITAL, PB, 2, 0);       // LED3 - D11GPIO_AF_SEL(DIGITAL, PB, 3, 0);       // LED4 - D12GPIO_AF_SEL(DIGITAL, PB, 4, 0);       // LED5 - D13GPIO_AF_SEL(DIGITAL, PB, 5, 0);       // LED6 - D14GPIO_AF_SEL(DIGITAL, PB, 6, 0);       // LED7 - D15GPIO_AF_SEL(DIGITAL, PB, 7, 0);       // LED8 - D16//PB8 - PB15 -> GPIO_AF_SEL(DIGITAL, PB, 8, 0);       // R1GPIO_AF_SEL(DIGITAL, PB, 9, 0);       // R2GPIO_AF_SEL(DIGITAL, PB, 10, 0);      // R3GPIO_AF_SEL(DIGITAL, PB, 11, 0);      // R4GPIO_AF_SEL(DIGITAL, PB, 12, 0);      // C1GPIO_AF_SEL(DIGITAL, PB, 13, 0);      // C2GPIO_AF_SEL(DIGITAL, PB, 14, 0);      // C3GPIO_AF_SEL(DIGITAL, PB, 15, 0);      // C4//  PA0 -> SB1 PA1 -> SB2 PA10 -> SB3 PA11 -> SB4GPIO_AF_SEL(DIGITAL, PA, 0, 0);       //  GPIO_AF_SEL(DIGITAL, PA, 1, 0);       //  GPIO_AF_SEL(DIGITAL, PA, 10, 0);      //  GPIO_AF_SEL(DIGITAL, PA, 11, 0);      //  // GPIO_PUPD_SEL(PUPD_NULL, PA, 0 );GPIO_PUPD_SEL(PUPD_NULL, PA, 1 );GPIO_PUPD_SEL(PUPD_NULL, PA, 10 );GPIO_PUPD_SEL(PUPD_NULL, PA, 11 );// GPIO_PUPD_SEL(PUPD_NULL, PB, 8 );GPIO_PUPD_SEL(PUPD_NULL, PB, 9 );GPIO_PUPD_SEL(PUPD_NULL, PB, 10 );GPIO_PUPD_SEL(PUPD_NULL, PB, 11 );// GPIO_AF_SEL(DIGITAL, PA, 12, 0);       // //PWM //GPIO_AF_SEL(DIGITAL, PA, 7, 3);// T0CH2PA_OUT_ENABLE(7);// GPIO_AF_SEL(DIGITAL, PB, 14, 0);GPIO_PUPD_SEL(PUPD_NULL, PB, 14);// GPIO_AF_SEL(DIGITAL, PA, 6, 3);// T0CH1GPIO_PUPD_SEL(PUPD_NULL, PA, 6);
}

这两处可能是我们会用掉的,在这里我们只需要选择相应的功能即可。

/*
上述代码中的的函数GPIO_AF_SEL(uint8_t AD,PA_Type* GPIOx,uint8_t gpiopin,uint8_t fun_num)表示GPIO管脚功能选择.AD      第一个参数代表处理数字量还是模拟量,DIGITAL     ANALOGY
GPIOx   第二个参数代表端口,PA PB PC
gpiopin 第三个参数代表管脚,0~31
fun_num 第4个参数代表功能,0~7
管脚及功能要查编程手册P20
*/

除非有配置管脚新功能,我们不要动Device_Init()和GPIO_Init(),有关的配置直接在main.c的main函数中配置。

/****************************************/

很遗憾,有很多的东西我没有办法一一给大家回复,所以我建立了一个群,供大家一起交流!

LK32T102学习-0相关推荐

  1. 【逆强化学习-0】Introduction

    文章目录 专栏传送门 0.引言 1.逆强化学习发展历程 2.需要准备的 专栏传送门 0.简介 1.学徒学习 2.最大熵学习 0.引言 \qquad相比于深度学习,国内强化学习的教程并不是特别多,而相比 ...

  2. [PyQt] MCV模式学习-0

    MCV模式学习-0 目的 item-based模式 0.0 QStringListModel 0.1 QAbstractListModel 0.2 目的 之前的PyQt采用的是item based形式 ...

  3. 华为弹性云服务器ECS使用学习0

    学习大纲 ECS概述 组成:CPU,内存,镜像,操作系统,云硬盘 ECS产品优势 弹性伸缩AS(弹性可扩展) ECS产品架构 Region:地理位置和网络时延的划分,同一个Region中共享计算和存储 ...

  4. 编程语言学习——0基础C语言入门

    自我介绍 我是一名即将升入大三的计算机科学与技术专业的学生,这是我第一次在CSDN上发表文章,在平时写代码时我会经常遇到许许多多的问题,所以在这个假期中我想不断地充实自己,让自己的专业知识基础更加牢固 ...

  5. Python学习0——基础知识1

    复习一下:Python基础知识学习 菜鸟教程:Python3 基础语法 | 菜鸟教程 (runoob.com) 一.数据类型 1.Number(数字) (1)数字类型 Python包括4种数字类型:i ...

  6. CUDA编程学习0——环境搭建环境详解

    目录 环境配置 软件安装 1.支持最高的cuda版本查询,下载cuda开发软件: 3.配置环境(~/.bashrc添加环境变量) 4.后续维护查询 补:关于windows下的cuda环境配置 一.Vi ...

  7. GIT学习0基础到入门(附图)

    GIT学习 1.git 常用命令代码 提交,或者修改代码到暂存区 git add 2.设置签名 git config user.name JackMa git config user.email 13 ...

  8. Hadoop基础学习0

    20161209 10:43--12:00 Hadoop,The Apache™ Hadoop® project develops open-source software for reliable, ...

  9. coreboot学习0:二度相逢是初识

    第一次听到coreboot是在大约一年半多以前,当时因为工作需要进行x86的底层开发,无意中接触到coreboot项目.现在再次对其进行学习.一来让自己也学习一下x86的BIOS开发,二来算对微机原理 ...

最新文章

  1. CreateFileMapping
  2. c 应用程序多语言版本,c – 在win32 API应用程序中实现全球化/多语言功能
  3. 微信小程序下拉刷新和上拉加载的实现
  4. 华华和月月种树(牛客)
  5. 拆解交易系统--性能优化,安全加固与弹性扩缩容
  6. 编程没基础学python多长时间-零基础学Python的过程有多难?需要多久?
  7. java随机生成10个不重复的数字,随机生成10个不重复的0-100的数字(实例讲解)
  8. case when then else多个条件_CentOS「linux」学习笔记24:if和case多个条件判断
  9. 三羊献瑞c语言编程入门,蓝桥杯-三羊献瑞,
  10. mysql5.7.17免安装版_MySql 5.7.17免安装配置
  11. RHEL网络设置,来自于hyper-v中的虚拟机
  12. CentOS7.x忘记root密码如何破解
  13. wifi抓包/苹果电脑mac book抓wifi sniffer packet
  14. xp系统usb android,xp系统usb网络共享怎么设置,xp系统usb手机网络共享设置方法
  15. VMware虚拟机磁盘文件vmdk单文件转多文件相互转换
  16. Linux性能调优,从优化思路说起
  17. [JavaScript] audio在浏览器中自动播放
  18. 一分钟完全关闭Antimalware Service Executable(windows defender)任务管理器程序
  19. C程序设计(谭浩强)--学习笔记
  20. BATCH: A Scalable Asymmetric DiscreteCross-Modal Hashing--文献翻译

热门文章

  1. nginx发布vue多页面程序
  2. 从零开始学习CANoe(五)—— 设计panel
  3. Autoware.Universe:如何在Carla 0.9.13上运行
  4. 桥梁防船撞水上安全预警装置系统|喜讯科技
  5. 剪映windows版1.0的使用
  6. TRT使用之pycuda安装
  7. IE11,360浏览器FormData 方法entries
  8. 压缩包密码忘记了,如何删除?
  9. SQL刷题记录(一)
  10. c语言中%-2d是撒意思,C语言中%-2d是撒意思