如何将以下代码移植到BL618-G0中// 包含头文件 #include "stm32f10x.h" #include "delay.h" #include "FSR.h" #include "usart.h" #include "adc.h" // 定义常量 #define PRESS_MIN 20 #define PRESS_MAX 6000 #define VOLTAGE_MIN 150 #define VOLTAGE_MAX 3300 // 定义变量 u8 state = 0; u16 val = 0; u16 value_AD = 0; long PRESS_AO = 0; int VOLTAGE_AO = 0; // 声明函数 long map(long x, long in_min, long in_max, long out_min, long out_max); int main(void) { // 初始化延时函数 delay_init(); // 配置NVIC NVIC_Configuration(); // 初始化串口 uart_init(9600); // 初始化ADC Adc_Init(); delay_ms(1000); printf("Test start\r\n"); while(1) { // 获取ADC采样值 value_AD = Get_Adc_Average(1,10); // 转换为电压值 VOLTAGE_AO = map(value_AD, 0, 4095, 0, 3300); if(VOLTAGE_AO < VOLTAGE_MIN) { PRESS_AO = 0; } else if(VOLTAGE_AO > VOLTAGE_MAX) { PRESS_AO = PRESS_MAX; } else { // 根据电压值计算压力值 PRESS_AO = map(VOLTAGE_AO, VOLTAGE_MIN, VOLTAGE_MAX, PRESS_MIN, PRESS_MAX); } // 输出结果 printf("ADÖµ = %d,µçѹ = %d mv,ѹÁ¦ = %ld g\r\n",value_AD,VOLTAGE_AO,PRESS_AO); // 延时500ms delay_ms(500); } } // 实现map函数 long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
时间: 2023-06-19 16:03:58 浏览: 103
BL618-G0是一款基于Arm Cortex-M3内核的低功耗无线SoC,它的硬件结构和STM32F10x有所不同,因此需要对代码进行相应的修改和适配。
首先需要根据BL618-G0的硬件结构和引脚分配,重新定义头文件和常量:
```c
#include "bl_mcu_sdk.h"
#include "bl_gpio.h"
#include "bl_adc.h"
#include "bl_uart.h"
#include "bl_delay.h"
#define PRESS_MIN 20
#define PRESS_MAX 6000
#define VOLTAGE_MIN 150
#define VOLTAGE_MAX 3300
```
接着需要修改主函数中的一些部分,比如将NVIC配置函数删除,因为BL618-G0不需要进行NVIC中断配置。需要将串口初始化函数和ADC初始化函数改为BL618-G0的初始化函数,并且将printf语句中的\r\n改为BL618-G0的换行符:
```c
int main(void)
{
// 初始化延时函数
bl_delay_init();
// 初始化串口
bl_uart_init(0, 9600, UART_BITWIDTH_8BIT, UART_STOP_BIT_1, UART_PARITY_DISABLE);
// 初始化ADC
bl_adc_init(ADC_CLK_DIV_2, ADC_RESOLUTION_12BIT, ADC_SCALE_4096, ADC_INPUT_MODE_SINGLE, ADC_ATVCC);
bl_delay_ms(1000);
bl_uart_printf("Test start\n");
while(1)
{
// 获取ADC采样值
uint16_t value_AD = bl_adc_single_get_value(ADC_0, ADC_CHANNEL_1);
// 转换为电压值
int VOLTAGE_AO = map(value_AD, 0, 4095, 0, 3300);
if(VOLTAGE_AO < VOLTAGE_MIN)
{
PRESS_AO = 0;
}
else if(VOLTAGE_AO > VOLTAGE_MAX)
{
PRESS_AO = PRESS_MAX;
}
else
{
// 根据电压值计算压力值
PRESS_AO = map(VOLTAGE_AO, VOLTAGE_MIN, VOLTAGE_MAX, PRESS_MIN, PRESS_MAX);
}
// 输出结果
bl_uart_printf("AD value = %d, voltage = %d mV, pressure = %ld g\n", value_AD, VOLTAGE_AO, PRESS_AO);
// 延时500ms
bl_delay_ms(500);
}
}
```
最后需要保留实现map函数的代码,并且在程序开头添加函数声明:
```c
long map(long x, long in_min, long in_max, long out_min, long out_max);
```
完整的代码如下:
```c
#include "bl_mcu_sdk.h"
#include "bl_gpio.h"
#include "bl_adc.h"
#include "bl_uart.h"
#include "bl_delay.h"
#define PRESS_MIN 20
#define PRESS_MAX 6000
#define VOLTAGE_MIN 150
#define VOLTAGE_MAX 3300
long map(long x, long in_min, long in_max, long out_min, long out_max);
int main(void)
{
// 初始化延时函数
bl_delay_init();
// 初始化串口
bl_uart_init(0, 9600, UART_BITWIDTH_8BIT, UART_STOP_BIT_1, UART_PARITY_DISABLE);
// 初始化ADC
bl_adc_init(ADC_CLK_DIV_2, ADC_RESOLUTION_12BIT, ADC_SCALE_4096, ADC_INPUT_MODE_SINGLE, ADC_ATVCC);
bl_delay_ms(1000);
bl_uart_printf("Test start\n");
while(1)
{
// 获取ADC采样值
uint16_t value_AD = bl_adc_single_get_value(ADC_0, ADC_CHANNEL_1);
// 转换为电压值
int VOLTAGE_AO = map(value_AD, 0, 4095, 0, 3300);
if(VOLTAGE_AO < VOLTAGE_MIN)
{
PRESS_AO = 0;
}
else if(VOLTAGE_AO > VOLTAGE_MAX)
{
PRESS_AO = PRESS_MAX;
}
else
{
// 根据电压值计算压力值
PRESS_AO = map(VOLTAGE_AO, VOLTAGE_MIN, VOLTAGE_MAX, PRESS_MIN, PRESS_MAX);
}
// 输出结果
bl_uart_printf("AD value = %d, voltage = %d mV, pressure = %ld g\n", value_AD, VOLTAGE_AO, PRESS_AO);
// 延时500ms
bl_delay_ms(500);
}
}
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
```
阅读全文