This commit is contained in:
2026-03-20 21:19:04 +08:00
parent 90c3d919df
commit 9d3b4b836f
247 changed files with 22127 additions and 30305 deletions

58
user/MCU/lhl_i2c_slave.c Executable file → Normal file
View File

@@ -9,14 +9,6 @@ DMA_HandleTypeDef DMA_Handle_IIC_Rx,DMA_Handle_IIC_Tx;
//<2F><>ʼ<EFBFBD><CABC>IIC
//i2c_slave_init(100000 , 0x02);
/**------------------------------------------------------------------------
* @brief <20><>ʼ<EFBFBD><CABC> I2C <20>ӻ<EFBFBD>ģʽ
* @param clockSpeed: I2C ʱ<><CAB1><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD> 100000 <20><>ʾ 100kHz
* @param slaveAddress: <20>ӻ<EFBFBD><D3BB><EFBFBD>ַ<EFBFBD><D6B7><37><CEBB>
* @note <20><><EFBFBD><EFBFBD> P0.1 Ϊ SCL<43><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ SCL<43><4C><EFBFBD><EFBFBD>P0.2 Ϊ SDA<44><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ SDA<44><41><EFBFBD><EFBFBD>
* <20><>Ϊ<EFBFBD><CEAA>©<EFBFBD><C2A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> I2C <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>жϡ<D0B6>
* @example I2C_Slave_Init(100000, 0x02); // 100kHz, <20>ӻ<EFBFBD><D3BB><EFBFBD>ַ 0x02
**/
void I2C_Slave_Init(u32 clockSpeed ,u16 slaveAddress)
{
GPIO_InitTypeDef GPIO_InitStructure;
@@ -57,14 +49,7 @@ void I2C_Slave_Init(u32 clockSpeed ,u16 slaveAddress)
/*<2A>ж<EFBFBD> <20><>ʽ*/
/*********************************************************************************************************************************************/
I2C_DATA_TypeDef I2CData;
/**------------------------------------------------------------------------
* @brief I2C1 <20>¼<EFBFBD><C2BC>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6>ʽ<EFBFBD><CABD>
* @note <20><><EFBFBD><EFBFBD> I2C <20>ӻ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>еĸ<D0B5><C4B8><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ַƥ<D6B7><EFBFBD><E4A1A2><EFBFBD>ݽ<EFBFBD><DDBD>ա<EFBFBD><D5A1><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>͡<EFBFBD>
* ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ʧ<EFBFBD>ܵȡ<DCB5><C8A1><EFBFBD><EFBFBD><EFBFBD> R_W λ<>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><>Ӧ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> I2CStartWriteProcess, I2CStartReadProcess,
* I2CReceiveProcess, I2CTransmitProcess, I2CResetProcess<73><73><EFBFBD><EFBFBD>
* <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>ʹ<EFBFBD><CAB9> DMA <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>
**/
void I2C1_EV_IRQHandler()
{
__IO uint32_t sta1,sta2;
@@ -326,14 +311,6 @@ void IIC_Cmd_Check_Test1(void)
/*********************************************************************************************************************************************/
/*DMA <20><>ʽ*/
/*********************************************************************************************************************************************/
/**------------------------------------------------------------------------
* @brief <20><>ʼ<EFBFBD><CABC> I2C <20>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>յ<EFBFBD> DMA ͨ<><CDA8><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>0<EFBFBD><30>
* @note <20><><EFBFBD><EFBFBD> DMAMUX <20><> I2C0_RX <20><><EFBFBD><EFBFBD>ӳ<EFBFBD>䵽 DMA ͨ<><CDA8>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA Ϊֱ<CEAA><D6B1>ģʽ<C4A3><CABD>
* Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ桢<DAB4><E6A1A2><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>1<EFBFBD>ֽڡ<D6BD>ѭ<EFBFBD><D1AD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ʹ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϡ<D0B6>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> I2CData.rxData <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @example DMA_I2C_SlaveRx_Init();
**/
void DMA_I2C_SlaveRx_Init(void)
{
DMAMUX_InitTypeDef DMAMUX_InitStructure;
@@ -363,14 +340,6 @@ void DMA_I2C_SlaveRx_Init(void)
NVIC_EnableIRQ(DMA1_CH0_IRQn);
}
/**------------------------------------------------------------------------
* @brief <20><>ʼ<EFBFBD><CABC> I2C <20>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>͵<EFBFBD> DMA ͨ<><CDA8><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>1<EFBFBD><31>
* @note <20><><EFBFBD><EFBFBD> DMAMUX <20><> I2C0_TX <20><><EFBFBD><EFBFBD>ӳ<EFBFBD>䵽 DMA ͨ<><CDA8>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA Ϊֱ<CEAA><D6B1>ģʽ<C4A3><CABD>
* Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ浽<DAB4><E6B5BD><EFBFBD><EFBFBD><E8A1A2><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>1<EFBFBD>ֽڡ<D6BD><DAA1><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B3A4><EFBFBD><EFBFBD> iic_tx_len
* ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϡ<D0B6><CFA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1> I2CData.txData <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @example DMA_I2C_SlaveTx_Init();
**/
void DMA_I2C_SlaveTx_Init(void)
{
DMAMUX_InitTypeDef DMAMUX_InitStructure;
@@ -400,29 +369,17 @@ void DMA_I2C_SlaveTx_Init(void)
NVIC_EnableIRQ(DMA1_CH1_IRQn);
}
/**------------------------------------------------------------------------
* @brief <20><><EFBFBD><EFBFBD> I2C <20>ӻ<EFBFBD> DMA <20><><EFBFBD><EFBFBD>ģʽ
* @param clockSpeed: I2C ʱ<><CAB1><EFBFBD>ٶ<EFBFBD>
* @param slaveAddress: <20>ӻ<EFBFBD><D3BB><EFBFBD>ַ
* @note <20><>ʼ<EFBFBD><CABC> I2C <20>ӻ<EFBFBD><D3BB><EFBFBD>ʹ<EFBFBD><CAB9> I2C DMA <20><><EFBFBD>󣬳<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD><EFBFBD><EFBFBD>
* @example StartDMA_I2C_Slave_RX(100000, 0x02);
**/
void StartDMA_I2C_Slave_RX(u32 clockSpeed ,u16 slaveAddress)
void DMA_I2C_Slave_Init(u32 clockSpeed ,u16 slaveAddress)
{
I2C_Slave_Init(clockSpeed,slaveAddress);
LHL_I2C_DMACmd(ENABLE);//DMA<4D><41><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
DMA_I2C_SlaveRx_Init();
iic_tx_len=3;
DMA_I2C_SlaveTx_Init();
LHL_DMA_Start(&DMA_Handle_IIC_Rx);
}
/**------------------------------------------------------------------------
* @brief I2C1 <20>¼<EFBFBD><C2BC>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA <20><>ʽ<EFBFBD><CABD>
* @note <20>ð汾<C3B0><E6B1BE><EFBFBD><EFBFBD> DMA ʹ<>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַƥ<D6B7><C6A5><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD>R_W=1<><31>ʱ<EFBFBD><CAB1>
* ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ӻ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>ǰΪ<C7B0>գ<EFBFBD><D5A3><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ʧ<EFBFBD>ܡ<EFBFBD>
* @example <20><><EFBFBD><EFBFBD> DMA ģʽ<C4A3>µ<EFBFBD> I2C <20>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
**/
//for DMA
void I2C1_EV_IRQHandler3()//
{
__IO uint32_t sta1,sta2;
@@ -460,7 +417,6 @@ void I2C1_EV_IRQHandler3()//
__DSB(); //make sure intterupt flag cleared
}
#endif
#endif