样例使用说明
☆ HC32F003 系列是一款 Low Pin Count、宽电压工作范围的 MCU。集成 12 位 1M sps 高精度SARADC 以及集成了比较器,多路 UART,SPI,I2C 等丰富的通讯外设,具有高整合度、高抗干扰、高可靠性的特点。HC32F003 内核采用 Cortex-M0+ 内核,配合成熟的 Keil μVision 调试开发软件,支持 C 语言及汇编语言,汇编指令。
☆ 本文旨在抛砖引玉,其余具体使用欢迎加Q:3254478211或加群164973950相互交流、学习。
作者:虹芯侠客1
来源:CSDN
原文:https://blog.csdn.net/jetson024/article/details/84619088
版权声明:本文为博主原创文章,转载请附上博文链接!
/****************************************************************************/
/ \file main.c
**
** A detailed description is available at
** @link Sample Group Some description @endlink
**
** - 2016-02-16 1.0 XYZ First version for Device Driver Library of Module.
**
******************************************************************************/
/******************************************************************************
/******************************************************************************
/******************************************************************************
/******************************************************************************
/******************************************************************************
/******************************************************************************
** \brief Main function of project
**
** \return uint32_t return value, if needed
**
** This sample
**
******************************************************************************/
uint8_t u8Senddata[10] = {0x12,0x34,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00};
uint8_t u8Recdata[10]={0x00};
boolean_t bIrq = 0;
uint8_t u8State = 0,u8SendCnt = 0,u8RecCnt = 0;
uint8_t SendFlg = 0,Comm_flg = 0;
uint8_t data=0;
static void I2cCallBack(void)
{
bIrq = 1;
u8State = I2C_GetState();
if(0 == SendFlg)
{
if(0x08 == u8State)
{
I2C_ClearFunc(I2cStart_En);
I2C_WriteByte(I2c_SlaveWt);//从机地址发送OK
}
if(0x18 == u8State)
{
I2C_WriteByte(0x00);//写零地址
}
if(0x28 == u8State)
{
I2C_WriteByte(u8Senddata[u8SendCnt]);
u8SendCnt++;
}
if(u8SendCnt>10)
{
I2C_SetFunc(I2cStop_En);
SendFlg = 1;
Comm_flg = 1;
}
}
else
{
if(0x08 == u8State)
{
I2C_ClearFunc(I2cStart_En);
I2C_WriteByte(I2c_SlaveWt);//从机地址发送OK
}
if(0x18 == u8State)
{
I2C_WriteByte(0x00);//读取0地址
}
if(0x28 == u8State)
{
I2C_SetFunc(I2cStart_En);
}
if(0x10 == u8State)
{
I2C_ClearFunc(I2cStart_En);
I2C_WriteByte(I2c_SlaveRd);
}
if(0x40 == u8State)
{
I2C_SetFunc(I2cAck_En);
}
if(0x50 == u8State)
{
u8Recdata[u8RecCnt] = I2C_ReadByte();
u8RecCnt++;
}
if(u8RecCnt>10)
{
I2C_SetFunc(I2cStop_En);
}
}
I2C_ClearIrq();
}
int32_t main(void)
{
stc_i2c_config_t stcI2cCfg;
stc_clk_config_t stcCfg;
DDL_ZERO_STRUCT(stcCfg);
DDL_ZERO_STRUCT(stcI2cCfg);
Gpio_InitIOExt(2,5,GpioDirOut,TRUE,FALSE,TRUE,FALSE);
Gpio_InitIOExt(2,6,GpioDirOut,TRUE,FALSE,TRUE,FALSE);
Gpio_SetFunc_I2CDAT_P25()
Gpio_SetFunc_I2CCLK_P26()
Clk_SetPeripheralGate(ClkPeripheralI2c,TRUE);
stcI2cCfg.enFunc = I2cBaud_En;
stcI2cCfg.u8Tm = 0x04;//100K=(4000000/(8*(4+1))
stcI2cCfg.pfnI2cCb = I2cCallBack;
stcI2cCfg.bTouchNvic = TRUE;
I2C_DeInit();
I2C_Init(stcI2cCfg);
I2C_SetFunc(I2cMode_En);
I2C_SetFunc(I2cStart_En);
while(1)
{
#if 1
if(1 == Comm_flg)
{
Comm_flg = 0;
delay1ms(100);
I2C_SetFunc(I2cStart_En);
}
#endif
}
}
/******************************************************************************