generated from hulk/gd32e23x_template
	Compare commits
	
		
			3 Commits
		
	
	
		
			d6f3ea33b1
			...
			de211abf4e
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| de211abf4e | |||
| 0910a26072 | |||
| 3f961a6a3e | 
| @@ -60,6 +60,6 @@ void I2C_scan(void); | ||||
|  | ||||
| int LDC1612_IIC_read_16bits(void); | ||||
|  | ||||
|  | ||||
| uint32_t TMP112A_ReadTemperature(void); | ||||
|  | ||||
| #endif //LDC1612_H | ||||
|   | ||||
| @@ -43,7 +43,5 @@ OF SUCH DAMAGE. | ||||
| #define LED_IRQ             TIMER16_IRQn | ||||
|  | ||||
| void led_config(void); | ||||
| void iicSendData(void); | ||||
| void iicReceiveData(void); | ||||
|  | ||||
| #endif /* MAIN_H */ | ||||
|   | ||||
							
								
								
									
										123
									
								
								src/LDC1612.c
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								src/LDC1612.c
									
									
									
									
									
								
							| @@ -4,8 +4,6 @@ | ||||
|  | ||||
| #include "LDC1612.h" | ||||
|  | ||||
|  | ||||
|  | ||||
| void I2C_config(void) { | ||||
|     rcu_periph_clock_enable(RCU_IR_GPIO); | ||||
|     rcu_periph_clock_enable(RCU_I2C); | ||||
| @@ -26,17 +24,6 @@ void I2C_config(void) { | ||||
|     i2c_ack_config(I2C0, I2C_ACK_ENABLE); | ||||
| } | ||||
|  | ||||
| // void LDC1612_Init(void) { | ||||
| //     uint8_t RCOUNT0_ALL[3]={SET_CONVERSION_TIME_REG_START,0x05,0x36};//csdn | ||||
| //     uint8_t SETTLECOUNT0_ALL[3]={SET_LC_STABILIZE_REG_START,0x00,0x0a}; | ||||
| //     uint8_t CLOCK_DIVIDERS0_ALL[3]={SET_FREQ_REG_START,0x10,0x02}; | ||||
| //     uint8_t ERROR_CONFIG_ALL[3]={ERROR_CONFIG_REG,0x00,0x00}; | ||||
| //     uint8_t MUX_CONFIG_ALL[3]={MUL_CONFIG_REG,0x82,0x0c}; | ||||
| //     uint8_t DRIVE_CURRENT0_ALL[3]={SET_DRIVER_CURRENT_REG,0x90,0x00}; | ||||
| //     uint8_t CONFIG_ALL[3]={SENSOR_CONFIG_REG,0x14,0x01};//csdn | ||||
| // | ||||
| // } | ||||
|  | ||||
| /** | ||||
|  * @brief 扫描I2C总线,查找连接的设备 | ||||
|  * | ||||
| @@ -198,4 +185,114 @@ int LDC1612_IIC_read_16bits(void) { | ||||
|  | ||||
|     printf("device id = %x\r\n", (data[0] <<8 | data[1])); | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| uint32_t TMP112A_ReadTemperature(void) { | ||||
|     uint8_t data[2] = {0}; | ||||
|     uint16_t raw_temp = 0; | ||||
|     uint16_t timeout = 0; | ||||
|     uint32_t temperature = 0; | ||||
|  | ||||
|     i2c_ack_config(I2C0, I2C_ACK_ENABLE); | ||||
|  | ||||
|     while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) && (timeout < I2C_TIME_OUT)) //判断IIC总线是否忙,发送起始信号 | ||||
|         timeout++; | ||||
|     if (timeout < I2C_TIME_OUT) { | ||||
|         i2c_start_on_bus(I2C0); | ||||
|         timeout = 0; | ||||
|     } else { | ||||
|         printf("err\r\n"); | ||||
|         return -1; // 超时返回错误 | ||||
|     } | ||||
|  | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_SBSEND) && (timeout < I2C_TIME_OUT)) //判断起始位是否发送,设置sensor地址并设置为写 | ||||
|         timeout++; | ||||
|     if (timeout < I2C_TIME_OUT) { | ||||
|         i2c_master_addressing(I2C0, TMP112A_ADDR, I2C_TRANSMITTER); | ||||
|         timeout = 0; | ||||
|     } else { | ||||
|         return -1; // 超时返回错误 | ||||
|     } | ||||
|  | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND) && (timeout < I2C_TIME_OUT)) | ||||
|         timeout++; | ||||
|     if (timeout < I2C_TIME_OUT) { | ||||
|         i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND); | ||||
|         timeout = 0; | ||||
|     } else { | ||||
|         return -1; // 超时返回错误 | ||||
|     } | ||||
|  | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_TBE) && (timeout < I2C_TIME_OUT)) //判断地址是否发送完成,然后发送寄存器地址 | ||||
|         timeout++; | ||||
|     if (timeout < I2C_TIME_OUT) { | ||||
|         i2c_data_transmit(I2C0, 0x00); | ||||
|         timeout = 0; | ||||
|         // i2c_start_on_bus(I2C0); | ||||
|     } else { | ||||
|         return -1; // 超时返回错误 | ||||
|     } | ||||
|  | ||||
|     while (i2c_flag_get(I2C0, I2C_FLAG_BTC) && (timeout < I2C_TIME_OUT)) //判断发送缓冲器是否为空,为空后(发送完毕)重新发送开始信号 | ||||
|         timeout++; | ||||
|     if (timeout < I2C_TIME_OUT) { | ||||
|         i2c_start_on_bus(I2C0); | ||||
|         timeout = 0; | ||||
|     } else { | ||||
|         return -1; // 超时返回错误 | ||||
|     } | ||||
|  | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_SBSEND) && (timeout < I2C_TIME_OUT)) { | ||||
|         timeout++; | ||||
|     } | ||||
|     if (timeout < I2C_TIME_OUT) { | ||||
|         i2c_master_addressing(I2C0, TMP112A_ADDR, I2C_RECEIVER); | ||||
|         timeout = 0; | ||||
|     } else { | ||||
|         return -1; // 超时返回错误 | ||||
|     } | ||||
|  | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND) && (timeout < I2C_TIME_OUT)) | ||||
|         timeout++; | ||||
|     if (timeout < I2C_TIME_OUT) { | ||||
|         i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND); | ||||
|         timeout = 0; | ||||
|     } else { | ||||
|         return -1; // 超时返回错误 | ||||
|     } | ||||
|  | ||||
|     // 读取第一个字节的数据 | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE) && (timeout < I2C_TIME_OUT)) { | ||||
|         timeout++; | ||||
|     } | ||||
|     if (timeout < I2C_TIME_OUT) { | ||||
|         data[0] = i2c_data_receive(I2C0); | ||||
|         timeout = 0; | ||||
|     } else { | ||||
|         return -1; // 超时返回错误 | ||||
|     } | ||||
|  | ||||
|     i2c_ack_config(I2C0, I2C_ACK_DISABLE); // 关闭发送ACK,它会在下一个字节完成后发送NAK | ||||
|  | ||||
|     // 读取第二个字节的数据 | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE) && (timeout < I2C_TIME_OUT)) { | ||||
|         timeout++; | ||||
|     } | ||||
|     if (timeout < I2C_TIME_OUT) { | ||||
|         data[1] = i2c_data_receive(I2C0); | ||||
|         timeout = 0; | ||||
|     } else { | ||||
|         return -1; // 超时返回错误 | ||||
|     } | ||||
|  | ||||
|     i2c_stop_on_bus(I2C0); | ||||
|  | ||||
|     // printf("data[0]: %x, data[1]: %x\r\n", data[0], data[1]); | ||||
|     raw_temp = ((uint16_t) (data[0] << 4) | (data[1]>>4)); | ||||
|     // printf("raw_temp: %x\r\n", raw_temp); | ||||
|     // printf("raw_temp(dec): %d\r\n", raw_temp); | ||||
|     temperature = raw_temp * 625; | ||||
|     // printf("temperature: %d\r\n", temperature); | ||||
|  | ||||
|     return temperature; | ||||
| } | ||||
| @@ -4,6 +4,8 @@ | ||||
|  | ||||
| #include "RS485.h" | ||||
|  | ||||
| extern uint32_t g_temperature_uint32; | ||||
|  | ||||
| void RS485_config(void) { | ||||
|     rcu_periph_clock_enable(RS485_GPIO_RCU); | ||||
|     rcu_periph_clock_enable(RS485_RCU); | ||||
| @@ -35,7 +37,8 @@ void process_command(char *cmd) { | ||||
|     if (strncmp(cmd, "M1", 2) == 0) { | ||||
|         printf("M1 -=-=- OK!\r\n"); | ||||
|     } else if (strncmp(cmd, "M2", 2) == 0) { | ||||
|         printf("M2 -=-=- OK!\r\n"); | ||||
|         // printf("M2 -=-=- OK!\r\n"); | ||||
|         printf("Temperature: %lu\r\n", g_temperature_uint32); | ||||
|         // } else if (strncmp(cmd, "M3", 2) == 0) { | ||||
|         //     char *param_str = cmd + 2; // Skip "M3" | ||||
|         //     int param = atoi(param_str + 1); // Skip "S" and convert to integer | ||||
|   | ||||
| @@ -36,6 +36,10 @@ OF SUCH DAMAGE. | ||||
| #include "main.h" | ||||
| #include "systick.h" | ||||
| #include "LDC1612.h" | ||||
| #include "RS485.h" | ||||
|  | ||||
| char rx_buffer[RX_BUFFER_SIZE]; | ||||
| uint8_t rx_index = 0; | ||||
|  | ||||
| /*! | ||||
|     \brief      this function handles NMI exception | ||||
| @@ -120,4 +124,24 @@ void TIMER16_IRQHandler(void) { | ||||
|         } | ||||
|         led_status = !led_status; | ||||
|     } | ||||
| } | ||||
|  | ||||
| void USART0_IRQHandler(void) { | ||||
|     if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) | ||||
|     { | ||||
|         usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE); | ||||
|         uint8_t received_data = (uint8_t)usart_data_receive(USART0); | ||||
|  | ||||
|         // 将接收到的数据存储到缓冲区 | ||||
|         if(rx_index < RX_BUFFER_SIZE - 1) { | ||||
|             rx_buffer[rx_index++] = received_data; | ||||
|         } | ||||
|  | ||||
|         // 检查是否接收到换行符,表示指令结束 | ||||
|         if(received_data == '\n') { | ||||
|             rx_buffer[rx_index] = '\0'; // 添加字符串结束符 | ||||
|             process_command(rx_buffer); // 处理指令 | ||||
|             rx_index = 0; // 重置缓冲区索引 | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										91
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								src/main.c
									
									
									
									
									
								
							| @@ -12,6 +12,8 @@ | ||||
| #include "RS485.h" | ||||
| #include "LDC1612.h" | ||||
|  | ||||
| uint32_t g_temperature_uint32; | ||||
|  | ||||
| void led_config(void) | ||||
| { | ||||
|     rcu_periph_clock_enable(LED_RCU); | ||||
| @@ -40,51 +42,6 @@ void led_config(void) | ||||
|     nvic_irq_enable(LED_IRQ, 2); | ||||
| } | ||||
|  | ||||
| void iicSendData(void) | ||||
| { | ||||
|     while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)); | ||||
|     i2c_start_on_bus(I2C0); | ||||
|     printf("1\r\n"); | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)); | ||||
|     i2c_master_addressing(I2C0, LDC1612_ADDR, I2C_TRANSMITTER); | ||||
|     printf("2\r\n"); | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)); | ||||
|     i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND); | ||||
|     printf("3\r\n"); | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_TBE)); | ||||
|     i2c_data_transmit(I2C0, 0x7E); | ||||
|     printf("4\r\n"); | ||||
|     i2c_start_on_bus(I2C0); | ||||
| } | ||||
|  | ||||
| void iicReceiveData(void) | ||||
| { | ||||
|     uint16_t data[3] = {0}; | ||||
|     i2c_start_on_bus(I2C0); | ||||
|     // i2c_stop_on_bus(I2C0); | ||||
|     printf("5\r\n"); | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)); | ||||
|     i2c_master_addressing(I2C0, LDC1612_ADDR, I2C_RECEIVER); | ||||
|     printf("6\r\n"); | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)); | ||||
|     i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND); | ||||
|     printf("7\r\n"); | ||||
|     i2c_ack_config(I2C0, I2C_ACK_DISABLE); | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)); | ||||
|     data[0] = i2c_data_receive(I2C0); | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)); | ||||
|     data[1] = i2c_data_receive(I2C0); | ||||
|     while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)); | ||||
|     data[2] = i2c_data_receive(I2C0); | ||||
|  | ||||
|     i2c_stop_on_bus(I2C0); | ||||
|     i2c_ack_config(I2C0, I2C_ACK_ENABLE); | ||||
|  | ||||
|     printf("data[0] = %x\r\n", data[0]); | ||||
|     printf("data[1] = %x\r\n", data[1]); | ||||
|     printf("data[2] = %x\r\n", data[2]); | ||||
| } | ||||
|  | ||||
| /*! | ||||
|     \brief      main function | ||||
|     \param[in]  none | ||||
| @@ -99,58 +56,18 @@ int main(void) | ||||
|     led_config(); | ||||
|     I2C_config(); | ||||
|  | ||||
|     // delay_ms(5000); | ||||
|     printf("\r\n"); | ||||
|     printf("XLSW-3DP-LDC1612! V0.0.1\r\n"); | ||||
|     printf("\r\n"); | ||||
|  | ||||
|     // uint16_t data[3] = {0}; | ||||
|  | ||||
|     // I2C_scan(); | ||||
|  | ||||
|     delay_ms(1000); | ||||
|  | ||||
|     // while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)); | ||||
|     // i2c_start_on_bus(I2C0); | ||||
|     // printf("1\r\n"); | ||||
|     // while (!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)); | ||||
|     // i2c_master_addressing(I2C0, LDC1612_ADDR, I2C_TRANSMITTER); | ||||
|     // printf("2\r\n"); | ||||
|     // while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)); | ||||
|     // i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND); | ||||
|     // printf("3\r\n"); | ||||
|     // while (!i2c_flag_get(I2C0, I2C_FLAG_TBE)); | ||||
|     // i2c_data_transmit(I2C0, 0x7E); | ||||
|     // printf("4\r\n"); | ||||
|     // i2c_start_on_bus(I2C0); | ||||
|     // // i2c_stop_on_bus(I2C0); | ||||
|  | ||||
|  | ||||
|     // delay_ms(100); | ||||
|     // i2c_start_on_bus(I2C0); | ||||
|     // delay_ms(100); | ||||
|     // i2c_stop_on_bus(I2C0); | ||||
|  | ||||
|  | ||||
|     // i2c_stop_on_bus(I2C0); | ||||
|     // i2c_ack_config(I2C0, I2C_ACK_ENABLE); | ||||
|  | ||||
|     // iicSendData(); | ||||
|     // iicReceiveData(); | ||||
|  | ||||
|     int result = 0; | ||||
|     result = LDC1612_IIC_read_16bits(); | ||||
|     printf("result = %d\r\n", result); | ||||
|  | ||||
|     while(1){ | ||||
|  | ||||
|  | ||||
|         delay_ms(1000); | ||||
|         printf("OK!!!\r\n"); | ||||
|         // iicSendData(); | ||||
|  | ||||
|         // i2c_flag_clear(I2C0, I2C_FLAG_I2CBSY); | ||||
|  | ||||
|         g_temperature_uint32 = TMP112A_ReadTemperature(); | ||||
|         delay_ms(500); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user