MAX32630FTHR设计笔记(1):流水灯(GPIO输出配置)及I2C驱动MAX14690
来源:互联网 发布:淘宝商家如何删除差评 编辑:程序博客网 时间:2024/06/17 08:08
首先感谢EE,板子终于到了,看完资料后给大家提供一个GPIO口的输出配置及MAX14690电池管理芯片的驱动配置
/*******************************************************************
内容:GPIO口配置,输出,及I2C驱动MAX14690
作者:Justice_Gao
日期:2017年7月2日
开发工具:KEIL MDK
版本:V5.23
*******************************************************************/
(1)GPIO口的配置及应用
/******************************************************************
max32630的GPIO的初始化设置相比较STM32F4的GPIO口初始化设置更为简单
初始化方法有两种:
(1)类似于STM32的方法:配置P3_0和P3_1管脚为输出管脚
gpio_cfg_t GPIO_OUTPUT_Pin;
GPIO_OUTPUT_Pin.mask = PIN_0|PIN_1; //设置pin位管脚,0~7
GPIO_OUTPUT_Pin.func = GPIO_FUNC_GPIO;//GPIO Function Selection
GPIO_OUTPUT_Pin.pad = GPIO_PAD_OPEN_DRAIN;// 适合有外设上拉电阻的输出管脚
GPIO_Config(&GPIO_OUTPUT_Pin);//初始化
则控制输出高低电平可直接调用函数GPIO_OutSet和GPIO_OutClr,
如输出高电平,则GPIO_OutSet(&GPIO_OUTPUT_Pin);
输出低电平,GPIO_OutClr(&GPIO_OUTPUT_Pin);
缺点:这种方法不适用设置多个输出类型pin管脚,比如P3_1输出高电平,P3_0输出低电平,这种方法就不适合
/*===================================================================
(2)第二种方法,可以说比前一种方便快捷的多:设置4个输出控制引脚
const gpio_cfg_t GAN_COL_Pin[] = {
{ PORT_4, PIN_0, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN },
{ PORT_4, PIN_1, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN },
{ PORT_4, PIN_2, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN },
{ PORT_4, PIN_3, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN },
};
在使用这些GPIO口前,首先需要初始化,
for(uint8_t i=0;i<4;i++)
{
GPIO_Config(&GAN_COL_Pin);
}
然后直接调用输出,如
GPIO_OutSet(&GAN_COL_Pin[0]); //P4_0输出高电平
GPIO_OutSet(&GAN_COL_Pin[1]); //P4_1输出高电平
GPIO_OutClr(&GAN_COL_Pin[2]); //P4_2输出低电平
GPIO_OutClr(&GAN_COL_Pin[3]); //P4_3输出低电平
======================================================================*/
言归正传,下面我们来介绍I2C驱动MAX14690部分
(2)I2C驱动MAX14690
如果主函数对MAX14690没有初始化,则LDO2和LDO3不会输出电压3V3和L3OUT。代码如下:
总结,其实从MAX32630-EVKIT评估板上移植程序到MAX32630FHR应用平台上并不难,关键是看懂资料,所有资料都在这里开发必备资料。另外附上MAX32630-EVKIT评估板的原理图资料,大家可以做个比较,改程序就简单了 MAX32630-EVKIT-MAX32631-EVKIT.pdf
/*******************************************************************
内容:GPIO口配置,输出,及I2C驱动MAX14690
作者:Justice_Gao
日期:2017年7月2日
开发工具:KEIL MDK
版本:V5.23
*******************************************************************/
(1)三色灯D1的GPIO口底层驱动
如图所示,三色灯分别与MAX32630的P2_4、P2_5和P2_6连接,当P2_4=0、P2_5=1、P2_6=1时,亮红灯;当P2_4=1、P2_5=0、P2_6=1时,亮绿灯;当P2_4=1、P2_5=1、P2_6=0时,亮蓝灯;
则初始化GPIO的程序为
const gpio_cfg_t LED[] = { { PORT_2, PIN_4, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN_PULLUP }, { PORT_2, PIN_5, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN_PULLUP }, { PORT_2, PIN_6, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN_PULLUP },}; void GPIO_Initial(){ GPIO_Config(&LED[0]); GPIO_Config(&LED[1]); GPIO_Config(&LED[2]); }这里我延伸一下,配置GPIO的输出类型有两种方法。
(1)GPIO口的配置及应用
/******************************************************************
max32630的GPIO的初始化设置相比较STM32F4的GPIO口初始化设置更为简单
初始化方法有两种:
(1)类似于STM32的方法:配置P3_0和P3_1管脚为输出管脚
gpio_cfg_t GPIO_OUTPUT_Pin;
typedef struct { uint32_t port; /// Index of GPIO port uint32_t mask; /// Pin mask. Multiple bits can be set. gpio_func_t func; /// Function type gpio_pad_t pad; /// Pad type} gpio_cfg_t;GPIO_OUTPUT_Pin.port = PORT_3; //设置端口P0~P4
GPIO_OUTPUT_Pin.mask = PIN_0|PIN_1; //设置pin位管脚,0~7
GPIO_OUTPUT_Pin.func = GPIO_FUNC_GPIO;//GPIO Function Selection
GPIO_OUTPUT_Pin.pad = GPIO_PAD_OPEN_DRAIN;// 适合有外设上拉电阻的输出管脚
GPIO_Config(&GPIO_OUTPUT_Pin);//初始化
则控制输出高低电平可直接调用函数GPIO_OutSet和GPIO_OutClr,
如输出高电平,则GPIO_OutSet(&GPIO_OUTPUT_Pin);
输出低电平,GPIO_OutClr(&GPIO_OUTPUT_Pin);
缺点:这种方法不适用设置多个输出类型pin管脚,比如P3_1输出高电平,P3_0输出低电平,这种方法就不适合
/*===================================================================
(2)第二种方法,可以说比前一种方便快捷的多:设置4个输出控制引脚
const gpio_cfg_t GAN_COL_Pin[] = {
{ PORT_4, PIN_0, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN },
{ PORT_4, PIN_1, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN },
{ PORT_4, PIN_2, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN },
{ PORT_4, PIN_3, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN },
};
在使用这些GPIO口前,首先需要初始化,
for(uint8_t i=0;i<4;i++)
{
GPIO_Config(&GAN_COL_Pin);
}
然后直接调用输出,如
GPIO_OutSet(&GAN_COL_Pin[0]); //P4_0输出高电平
GPIO_OutSet(&GAN_COL_Pin[1]); //P4_1输出高电平
GPIO_OutClr(&GAN_COL_Pin[2]); //P4_2输出低电平
GPIO_OutClr(&GAN_COL_Pin[3]); //P4_3输出低电平
======================================================================*/
言归正传,下面我们来介绍I2C驱动MAX14690部分
(2)I2C驱动MAX14690
如果主函数对MAX14690没有初始化,则LDO2和LDO3不会输出电压3V3和L3OUT。代码如下:
int MAX14690_Init(const max14690_cfg_t *max14690cfg){ uint8_t addr; uint8_t data[2]; /* Setup the I2CM Peripheral to talk to the MAX14690 */ I2CM_Init(MAX14690_I2CM, &max14690_sys_cfg, I2CM_SPEED_100KHZ); /* Attempt to read the ID from the device */ addr = MAX14690_REG_CHIP_ID; if (I2CM_Read(MAX14690_I2CM, MAX14690_I2C_ADDR, &addr, 1, data, 2) != 2) { return E_COMM_ERR; } /* Configure the initial state of LDO2 */ if (MAX14690_LDO2SetV(max14690cfg->ldo2mv) != E_NO_ERROR) { return E_COMM_ERR; } if (MAX14690_LDO2SetMode(max14690cfg->ldo2mode) != E_NO_ERROR) { return E_COMM_ERR; } /* Configure the initial state of LDO3 */ if (MAX14690_LDO3SetV(max14690cfg->ldo3mv) != E_NO_ERROR) { return E_COMM_ERR; } if (MAX14690_LDO2SetMode(max14690cfg->ldo2mode) != E_NO_ERROR) { return E_COMM_ERR; } return E_NO_ERROR;}其中#define MAX14690_I2CM MXC_I2CM2 /**< Using I2C Master 0 Base Peripheral Address. */
/** * I2C Master system configuration object for communicating with the MAX14690. */const sys_cfg_i2cm_t max14690_sys_cfg = { .clk_scale = CLKMAN_SCALE_DIV_1, .io_cfg = IOMAN_I2CM2(IOMAN_MAP_A, 1)};这些都在安装开发工具中都有,详细请看另一篇帖子MAX32630开发工具,需要注意的是,这个开发工具安装好以后,源代码都是MAX32630-EVKIT评估板上的源代码,比如源代码驱动MAX14690是使用I2CM0的,而MAX32630FHR应用平台是使用I2CM2的,需要做相应的修改才能驱动成功。
总结,其实从MAX32630-EVKIT评估板上移植程序到MAX32630FHR应用平台上并不难,关键是看懂资料,所有资料都在这里开发必备资料。另外附上MAX32630-EVKIT评估板的原理图资料,大家可以做个比较,改程序就简单了 MAX32630-EVKIT-MAX32631-EVKIT.pdf
最后给出我的main函数的程序:
/** * @file main.c * */#define MAX14690_I2C_ADDRESS (0x50 >> 1)#define MAX14690_I2CM2 MXC_I2CM2 /**< Using I2C Master 0 Base Peripheral Address. *//***** Includes *****/#include <stdio.h>#include <stdint.h>#include "mxc_config.h"#include "board.h"#include "lp.h"#include "gpio.h"#include "tmr.h"#include "tmr_utils.h"#include "max14690.h"#include "i2cm.h"const max14690_cfg_t max14690_cfg2 = { .ldo2mv = 3300, /**< 3.3v in mV, connected to VDDB */ .ldo2mode = MAX14690_LDO_MPC1, /**< Enalbe LDO2 when +5v is present on VBUS */ .ldo3mv = 3300, /**< 3.3v is L3OUT -- optional */ .ldo3mode = MAX14690_LDO_ENABLED /**< Enable the LDO. */};const gpio_cfg_t LED[] = { { PORT_2, PIN_4, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN_PULLUP }, { PORT_2, PIN_5, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN_PULLUP }, { PORT_2, PIN_6, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN_PULLUP },}; void GPIO_Initial(){ GPIO_Config(&LED[0]); GPIO_Config(&LED[1]); GPIO_Config(&LED[2]); }#define CLOCK 23/*------------------------------------------------------------ usÑóê±oˉêy ------------------------------------------------------------*/void delay_us(uint32_t us){ uint32_t n; while(us--)for(n=0;n<CLOCK;n++); } /*------------------------------------------------------------ msÑóê±oˉêy------------------------------------------------------------*/void delay_ms(uint32_t ms){ while(ms--)delay_us(1000); } /******************************************************************************/int main(void){ GPIO_Initial(); MAX14690_Init(&max14690_cfg2); while(1) { GPIO_OutClr(&LED[0]); GPIO_OutSet(&LED[1]); GPIO_OutSet(&LED[2]); delay_ms(1000); GPIO_OutSet(&LED[0]); GPIO_OutClr(&LED[1]); GPIO_OutSet(&LED[2]); delay_ms(1000); GPIO_OutSet(&LED[0]); GPIO_OutSet(&LED[1]); GPIO_OutClr(&LED[2]); delay_ms(1000); } }
阅读全文
0 0
- MAX32630FTHR设计笔记(1):流水灯(GPIO输出配置)及I2C驱动MAX14690
- stm32之GPIO配置及库函数学习笔记——以流水灯为例
- arm的GPIO控制(流水灯)
- i2c 驱动gpio模拟i2c
- linux GPIO-i2c驱动
- davinci平台的I2C驱动(非GPIO口模拟i2c)
- 分层设计的驱动程序及gpio驱动(Linux驱动5)
- 学习原子哥STM32M4(1):GPIO输出配置
- gpio模拟I2C,驱动pcf8574T
- i2c 驱动五:gpio模拟i2c
- I2C驱动开发(1)
- 树莓派学习笔记——RPi.GPIO 流水灯
- GPIO模拟I2C-1
- GPIO编程模拟I2C入门(转)
- LPC1769 GPIO流水灯实验
- [STM32][基础]GPIO流水灯
- GPIO实现I2C从机的设计[1]
- AM3359 GPIO 驱动设计
- Sqlite limit用法
- 转:Linux中tomcat服务成功发布但局域网浏览器无法访问
- Linux:生产者消费者模型
- 使用js实现下拉框默认选中
- 原码, 反码, 补码 详解
- MAX32630FTHR设计笔记(1):流水灯(GPIO输出配置)及I2C驱动MAX14690
- os.path.join/os.mkdir/read_csv等
- 密码框password调用数字键盘
- 后台运行不进viewWillDisappear
- activiti出现JavaWeb:NoClassDefFoundError: org/springframework/core/OrderComparator$OrderSourceProvider
- USB之 描述符
- 关于去色的公式
- oracle OCP认证经验分享
- android Volly的使用(2)