ch32v003官方iic的demo卡死在while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ) );
/**********************************?(C)?COPYRIGHT?*******************************
?*?File?Name??????????:?main.c
?*?Author?????????????:?WCH
?*?Version????????????:?V1.0.0
?*?Date???????????????:?2022/08/08
?*?Description????????:?Main?program?body.
*********************************************************************************
*?Copyright?(c)?2021?Nanjing?Qinheng?Microelectronics?Co.,?Ltd.
*?Attention:?This?software?(modified?or?not)?and?binary?are?used?for?
*?microcontroller?manufactured?by?Nanjing?Qinheng?Microelectronics.
*******************************************************************************/

/*
?*@Note
?7-bit?addressing?mode,?master/slave?mode,?transceiver?routine:
?I2C1_SCL(PC2)\I2C1_SDA(PC1).
??This?routine?demonstrates?that?Master?sends?and?Slave?receives.
??Note:?The?two?boards?download?the?Master?and?Slave?programs?respectively,
???and?power?on?at?the?same?time.
??????Hardware?connection:
????????????PC2?--?PC2
????????????PC1?--?PC1

*/

#include?"debug.h"

/*?I2C?Mode?Definition?*/
#define?HOST_MODE???0
#define?SLAVE_MODE???1

/*?I2C?Communication?Mode?Selection?*/
#define?I2C_MODE???HOST_MODE
//#define?I2C_MODE???SLAVE_MODE

/*?Global?define?*/
#define?Size???6
#define?RXAdderss???0x02
#define?TxAdderss???0x02

/*?Global?Variable?*/
u8?TxData[Size]?=?{?0x01,?0x02,?0x03,?0x04,?0x05,?0x06?};
u8?RxData[5][Size];

/*********************************************************************
?*?@fn??????IIC_Init
?*
?*?@brief???Initializes?the?IIC?peripheral.
?*
?*?@return??none
?*/
void?IIC_Init(u32?bound,?u16?address)
{
????GPIO_InitTypeDef?GPIO_InitStructure={0};
????I2C_InitTypeDef?I2C_InitTSturcture={0};

????RCC_APB2PeriphClockCmd(?RCC_APB2Periph_GPIOC?|?RCC_APB2Periph_AFIO,?ENABLE?);
????RCC_APB1PeriphClockCmd(?RCC_APB1Periph_I2C1,?ENABLE?);

????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_2;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_OD;
????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
????GPIO_Init(?GPIOC,?&GPIO_InitStructure?);

????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_1;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_OD;
????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
????GPIO_Init(?GPIOC,?&GPIO_InitStructure?);

????I2C_InitTSturcture.I2C_ClockSpeed?=?bound;
????I2C_InitTSturcture.I2C_Mode?=?I2C_Mode_I2C;
????I2C_InitTSturcture.I2C_DutyCycle?=?I2C_DutyCycle_16_9;
????I2C_InitTSturcture.I2C_OwnAddress1?=?address;
????I2C_InitTSturcture.I2C_Ack?=?I2C_Ack_Enable;
????I2C_InitTSturcture.I2C_AcknowledgedAddress?=?I2C_AcknowledgedAddress_7bit;
????I2C_Init(?I2C1,?&I2C_InitTSturcture?);

????I2C_Cmd(?I2C1,?ENABLE?);

#if?(I2C_MODE?==?HOST_MODE)
????I2C_AcknowledgeConfig(?I2C1,?ENABLE?);

#endif
}

/*********************************************************************
?*?@fn??????main
?*
?*?@brief???Main?program.
?*
?*?@return??none
?*/
int?main(void)
{
????u8?i?=?0;
????u8?j?=?0;
????u8?p?=?0;
????Delay_Init();
????USART_Printf_Init(115200);
????printf("SystemClk:%d\r\n",SystemCoreClock);

????printf("IIC?Host?mode\r\n");
????IIC_Init(?80000,?TxAdderss);

????for(?j?=0;?j?<?5;?j++)
?????{
????while(?I2C_GetFlagStatus(?I2C1,?I2C_FLAG_BUSY?)?!=?RESET?);

????I2C_GenerateSTART(?I2C1,?ENABLE?);

????printf("0\n");
????while(?!I2C_CheckEvent(?I2C1,?I2C_EVENT_MASTER_MODE_SELECT?)?);
????I2C_Send7bitAddress(?I2C1,?0x02,?I2C_Direction_Transmitter?);

????printf("1\n");
????Delay_Ms(10);
????while(?!I2C_CheckEvent(?I2C1,?I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED?)?);
????printf("2\n");
?
???for(?i=0;?i<?6;i++?)
????{
????????if(?I2C_GetFlagStatus(?I2C1,?I2C_FLAG_TXE?)?!=??RESET?)
????????{
????????????Delay_Ms(100);
????????????I2C_SendData(?I2C1,?TxData[i]?);
????????}
????}

????while(?!I2C_CheckEvent(?I2C1,?I2C_EVENT_MASTER_BYTE_TRANSMITTED?)?);
????I2C_GenerateSTOP(?I2C1,?ENABLE?);
????Delay_Ms(1000);
?????}

????while(1);
}


板子是淘寶無名科技的ch32v003最小系統(tǒng)板


您好,使用IIC進(jìn)行主從通信,注意IIC引腳要接上拉電阻,此外若卡死在某個事件中,可適當(dāng)降低通信速度試一下或加入超時機(jī)制,卡死之后跳過該循環(huán),等待下一次操作。后續(xù)若有問題,可通過郵箱(lzs@wch.cn)具體和我溝通一下。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频