MSP432P401R快速上手

一,准备(环境安装)

用的keil5

环境安装视频icon-default.png?t=N7T8https://www.bilibili.com/video/BV1z4411u76P/?spm_id_from=333.337.search-card.all.click&vd_source=c66e6183ead1715d20c8afce53b0923b

Code:指令部分 , RO-data:只读数据  RW-data:全局变量 ZI-data:初始化为0的数据

差的部分:

1,没有准备延迟(可以用滴答计时器延迟和循环)

2,ADC14模块        MSP432P401R单片机-ADC14模块_哔哩哔哩_bilibili

3,Timer32

4,MSP432P401R 的硬件设计

二,GPIO输入输出

深刻理解:深刻理解GPIO

MSP432P401R快速上手_第1张图片

复用输出模式:要实现芯片内自动控制电平的功能(PWM模式)而设置的模式

复用输入模式:略

浮空输入模式:在没有输出电平时,引脚电平是不定的(浮空的)[这一种输入模式的电平会完全取决于外部电路而与内部电路无关。有时候会用作对开关按键的读取。但是在没有外部电路接入的时候,IO脚浮空会使得电平不确定]

下拉输入模式:[在没有信号输入的情况下可以稳定在低电平]

上拉输入模式:[在没有信号输入的情况下可以稳定在高电平]

测试函数

#define Key1 GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1)


int main()
{
	MySystem_init(); 
	led_init();
	key_init();
	
	
	while(1)
	{
		if(Key1 == 0){
			GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);
		}else {
			GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
		}
		
	}
}

三,OLED

1,移植一个i2c和oled就行

2,主函数

#include "driverlib.h"
#include "sys.h"
#include "LED.h"
#include "KEY.h"
#include "OLED.h"
#include "OLED_Data.h"

#define Key1 GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1)
int i;

int main()
{
	MySystem_init(); 
	led_init();
	key_init();
	OLED_Init();
		
	while(1)
	{

		if(Key1 == 0){
			i++;
			while(Key1 == 0);
		}
		OLED_Printf(0 ,40, OLED_8X16, "Num = %d", i); 
		OLED_ShowChinese(10, 10, "朵拉");
		OLED_Update();
	}
}

四,串口

1,资源和引脚

MSP432P401R快速上手_第2张图片

2,初始化,串口中断,计算波特率的函数

直接抄例程

3,主函数

#include "driverlib.h"
#include "sys.h"
#include "usart.h"
#include "LED.h"
#include "KEY.h"
#include "OLED.h"
#include "OLED_Data.h"

#define Key1 GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1)

extern char data;

int main()
{
	MySystem_init(); 
	led_init();
	key_init();
	OLED_Init();
	usart_init(115200);
	
	while(1)
	{
    if(Key1 == 0)
		{
			UART_transmitData(EUSCI_A2_BASE, data);
		}
		
		OLED_Printf(0 ,0, OLED_8X16, "data = %c", data); 
		OLED_Update();
	}
}

五,定时器,中断

1,MPU6050的外部中断

//P1口中断服务函数
void PORT1_IRQHandler(void)
{
    uint32_t status;
	status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1); //读取发生中断的中断源IO口
	MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status);         //清除该口中断标志
	
	if(status == GPIO_PIN5) //中断发生为P1.5
	{
		if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
		{ 
			//得到了三个角,存在pitch,roll,yaw里面
		}		
	}
}

2,定时器资源

定时器和通道 CLK CH0 CH1 CH2 CH3 CH4
TA0 P7.3 P2.4 P2.5 P2.6 P2.7
TA1 P8.0 P7.7 P7.6 P7.5 P7.4
TA2 P8.1 P5.6 P5.7 P6.6 P6.7
TA3 P10.4 P10.5 P8.2 P9.2 P9.3

3,定时器中断

没学

4,配置中断优先级

//例1:串口中断优先级配置
Interrupt_setPriority(INT_EUSCIA2, 0<<5); //串口2优先级:0

//例2:外部中断优先级配置
Interrupt_setPriority(INT_PORT5, 1<<5); //外部中断线5优先级: 1
/*
这个函数有两个入口参数:中断类型(填你要配置的中断类型) ,优先级(“左移符号”左边填0-7,数字越小,优先级越高,0级中断优先级最高。)
*/

六,mpu6050的角度解析库

移植就行

七,编码器

移植就行

Ti的任意项目

你可能感兴趣的:(单片机,嵌入式硬件)