generated from hulk/gd32e23x_template_cmake_vscode
142 lines
4.3 KiB
C
142 lines
4.3 KiB
C
/*!
|
|
\file main.c
|
|
\brief running LED
|
|
|
|
\version 2025-02-10, V2.4.0, demo for GD32E23x
|
|
*/
|
|
|
|
/*
|
|
Copyright (c) 2025, GigaDevice Semiconductor Inc.
|
|
|
|
Redistribution and use in source and binary forms, with or without modification,
|
|
are permitted provided that the following conditions are met:
|
|
|
|
1. Redistributions of source code must retain the above copyright notice, this
|
|
list of conditions and the following disclaimer.
|
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
this list of conditions and the following disclaimer in the documentation
|
|
and/or other materials provided with the distribution.
|
|
3. Neither the name of the copyright holder nor the names of its contributors
|
|
may be used to endorse or promote products derived from this software without
|
|
specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
|
OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#include "gd32e23x.h"
|
|
#include "systick.h"
|
|
#include "uart.h"
|
|
#include "led.h"
|
|
#include "command.h"
|
|
#include <stdio.h>
|
|
#include "i2c.h"
|
|
#include "board_config.h"
|
|
#include "ldc1612.h"
|
|
|
|
bool g_status_switch = false;
|
|
|
|
/*!
|
|
\brief main function
|
|
\param[in] none
|
|
\param[out] none
|
|
\retval none
|
|
*/
|
|
int main(void)
|
|
{
|
|
|
|
setbuf(stdout, NULL);
|
|
systick_config();
|
|
rs485_init();
|
|
|
|
led_init();
|
|
|
|
#ifdef DEBUG_VERBOSE
|
|
char hello_world[] = {"Hello World!\r\n"};
|
|
|
|
for (uint8_t i = 0; i < sizeof(hello_world); i++)
|
|
{
|
|
while (usart_flag_get(RS485_PHY, USART_FLAG_TBE) == RESET) {}
|
|
usart_data_transmit(RS485_PHY, hello_world[i]);
|
|
}
|
|
|
|
while (usart_flag_get(RS485_PHY, USART_FLAG_TC) == RESET) {}
|
|
|
|
|
|
#endif
|
|
|
|
i2c_config();
|
|
|
|
#ifdef DEBUG_VERBOSE
|
|
i2c_scan();
|
|
|
|
i2c_bus_reset();
|
|
#endif
|
|
|
|
// i2c_scan();
|
|
|
|
uint8_t ldc_data[2] = {0};
|
|
|
|
i2c_result_t i2c_result = i2c_read_16bits(LDC1612_ADDR, READ_MANUFACTURER_ID, ldc_data);
|
|
|
|
// const char* i2c_string = i2c_get_status_string(i2c_result);
|
|
|
|
// const char* msg1 = "I2C Status: ";
|
|
// for (uint8_t i = 0; msg1[i] != '\0'; i++) {
|
|
// while (usart_flag_get(RS485_PHY, USART_FLAG_TBE) == RESET) {}
|
|
// usart_data_transmit(RS485_PHY, msg1[i]);
|
|
// }
|
|
|
|
// // 发送i2c_string内容
|
|
// for (uint8_t i = 0; i2c_string[i] != '\0'; i++) {
|
|
// while (usart_flag_get(RS485_PHY, USART_FLAG_TBE) == RESET) {}
|
|
// usart_data_transmit(RS485_PHY, i2c_string[i]);
|
|
// }
|
|
|
|
// // 发送换行符
|
|
// const char* newline1 = "\r\n";
|
|
// for (uint8_t i = 0; newline1[i] != '\0'; i++) {
|
|
// while (usart_flag_get(RS485_PHY, USART_FLAG_TBE) == RESET) {}
|
|
// usart_data_transmit(RS485_PHY, newline1[i]);
|
|
// }
|
|
|
|
// 第二句:发送 "LDC1612 Manufacturer ID: 0x" + 十六进制数值 + "\r\n"
|
|
const char* msg2 = "LDC1612 Manufacturer ID: 0x";
|
|
for (uint8_t i = 0; msg2[i] != '\0'; i++) {
|
|
while (usart_flag_get(RS485_PHY, USART_FLAG_TBE) == RESET) {}
|
|
usart_data_transmit(RS485_PHY, msg2[i]);
|
|
}
|
|
|
|
// 发送十六进制数值
|
|
uint16_t manufacturer_id = (ldc_data[0] << 8) | ldc_data[1];
|
|
uint8_t hex_chars[] = "0123456789ABCDEF";
|
|
for (int8_t i = 3; i >= 0; i--) {
|
|
uint8_t nibble = (manufacturer_id >> (i * 4)) & 0x0F;
|
|
while (usart_flag_get(RS485_PHY, USART_FLAG_TBE) == RESET) {}
|
|
usart_data_transmit(RS485_PHY, hex_chars[nibble]);
|
|
}
|
|
|
|
// 发送换行符
|
|
const char* newline2 = "\r\n";
|
|
for (uint8_t i = 0; newline2[i] != '\0'; i++) {
|
|
while (usart_flag_get(RS485_PHY, USART_FLAG_TBE) == RESET) {}
|
|
usart_data_transmit(RS485_PHY, newline2[i]);
|
|
}
|
|
|
|
// 等待所有数据发送完成
|
|
while (usart_flag_get(RS485_PHY, USART_FLAG_TC) == RESET) {}
|
|
|
|
while(1){
|
|
command_process();
|
|
delay_ms(100);
|
|
}
|
|
}
|