LK32T102学习-0
工程建立步骤:
- 建立一个文件夹,文件夹的名称就是任务名称,如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相关推荐
- 【逆强化学习-0】Introduction
文章目录 专栏传送门 0.引言 1.逆强化学习发展历程 2.需要准备的 专栏传送门 0.简介 1.学徒学习 2.最大熵学习 0.引言 \qquad相比于深度学习,国内强化学习的教程并不是特别多,而相比 ...
- [PyQt] MCV模式学习-0
MCV模式学习-0 目的 item-based模式 0.0 QStringListModel 0.1 QAbstractListModel 0.2 目的 之前的PyQt采用的是item based形式 ...
- 华为弹性云服务器ECS使用学习0
学习大纲 ECS概述 组成:CPU,内存,镜像,操作系统,云硬盘 ECS产品优势 弹性伸缩AS(弹性可扩展) ECS产品架构 Region:地理位置和网络时延的划分,同一个Region中共享计算和存储 ...
- 编程语言学习——0基础C语言入门
自我介绍 我是一名即将升入大三的计算机科学与技术专业的学生,这是我第一次在CSDN上发表文章,在平时写代码时我会经常遇到许许多多的问题,所以在这个假期中我想不断地充实自己,让自己的专业知识基础更加牢固 ...
- Python学习0——基础知识1
复习一下:Python基础知识学习 菜鸟教程:Python3 基础语法 | 菜鸟教程 (runoob.com) 一.数据类型 1.Number(数字) (1)数字类型 Python包括4种数字类型:i ...
- CUDA编程学习0——环境搭建环境详解
目录 环境配置 软件安装 1.支持最高的cuda版本查询,下载cuda开发软件: 3.配置环境(~/.bashrc添加环境变量) 4.后续维护查询 补:关于windows下的cuda环境配置 一.Vi ...
- GIT学习0基础到入门(附图)
GIT学习 1.git 常用命令代码 提交,或者修改代码到暂存区 git add 2.设置签名 git config user.name JackMa git config user.email 13 ...
- Hadoop基础学习0
20161209 10:43--12:00 Hadoop,The Apache™ Hadoop® project develops open-source software for reliable, ...
- coreboot学习0:二度相逢是初识
第一次听到coreboot是在大约一年半多以前,当时因为工作需要进行x86的底层开发,无意中接触到coreboot项目.现在再次对其进行学习.一来让自己也学习一下x86的BIOS开发,二来算对微机原理 ...
最新文章
- CreateFileMapping
- c 应用程序多语言版本,c – 在win32 API应用程序中实现全球化/多语言功能
- 微信小程序下拉刷新和上拉加载的实现
- 华华和月月种树(牛客)
- 拆解交易系统--性能优化,安全加固与弹性扩缩容
- 编程没基础学python多长时间-零基础学Python的过程有多难?需要多久?
- java随机生成10个不重复的数字,随机生成10个不重复的0-100的数字(实例讲解)
- case when then else多个条件_CentOS「linux」学习笔记24:if和case多个条件判断
- 三羊献瑞c语言编程入门,蓝桥杯-三羊献瑞,
- mysql5.7.17免安装版_MySql 5.7.17免安装配置
- RHEL网络设置,来自于hyper-v中的虚拟机
- CentOS7.x忘记root密码如何破解
- wifi抓包/苹果电脑mac book抓wifi sniffer packet
- xp系统usb android,xp系统usb网络共享怎么设置,xp系统usb手机网络共享设置方法
- VMware虚拟机磁盘文件vmdk单文件转多文件相互转换
- Linux性能调优,从优化思路说起
- [JavaScript] audio在浏览器中自动播放
- 一分钟完全关闭Antimalware Service Executable(windows defender)任务管理器程序
- C程序设计(谭浩强)--学习笔记
- BATCH: A Scalable Asymmetric DiscreteCross-Modal Hashing--文献翻译