uint8 QAD[5]={0,1,4,5,6}; void Read_ADC(void) { static int16 i,j,k,temp; for(i=0;i<5;i++) //234us { ad_valu[0][i]= adc_once(ADC_P00, ADC_12BIT); ad_valu[1][i]= adc_once(ADC_P01, ADC_12BIT); // ad_valu[2][i]= adc_once(ADC_P05, ADC_12BIT); // ad_valu[3][i]= adc_once(ADC_P06, ADC_12BIT); ad_valu[4][i]= adc_once(ADC_P10, ADC_12BIT); ad_valu[5][i]= adc_once(ADC_P11, ADC_12BIT); ad_valu[6][i]= adc_once(ADC_P13, ADC_12BIT); // ad_valu[7][i]= adc_once(ADC_P14, ADC_12BIT); } for(i=0;i<5;i++) { for(j=0;j<4;j++) { for(k=0;k<4-j;k++) { if(ad_valu[QAD[i]][k] > ad_valu[QAD[i]][k+1]) { temp = ad_valu[QAD[i]][k+1]; ad_valu[QAD[i]][k+1] = ad_valu[QAD[i]][k]; ad_valu[QAD[i]][k] = temp; } } } }5个电感,将其移植到以gd32f303为开发板的单片机上,通道号为ADC0, ADC_CH_10,ADC0, ADC_CH_11,ADC0, ADC_CH_12,ADC0, ADC_CH_13,ADC0, ADC_CH_15,5个电感
时间: 2024-04-17 10:23:23 浏览: 126
根据您提供的代码,您想将5个电感连接到以gd32f303为开发板的单片机上,并使用ADC模块进行转换。电感连接的通道号如下:
- ADC0, ADC_CH_10: 第一个电感
- ADC0, ADC_CH_11: 第二个电感
- ADC0, ADC_CH_12: 第三个电感
- ADC0, ADC_CH_13: 第四个电感
- ADC0, ADC_CH_15: 第五个电感
在代码中,您使用了adc_once()函数进行一次性的ADC转换,并将转换结果存储在ad_valu数组中。根据您的代码逻辑,每个电感的5个连续转换结果将存储在ad_valu数组的相应索引位置。
请确保在您的开发板上正确连接电感,并将相应的通道号与ADC模块进行关联。另外,您还可以根据需要进行其他配置,例如采样时间和分辨率。
请注意,根据您的代码,只有前两个电感(QAD[0]和QAD[1])进行了排序处理,后面三个电感(QAD[2]、QAD[3]和QAD[4])被注释掉了,如果您需要对后面三个电感进行排序处理,请取消注释相关代码。
最后,您可以使用ad_valu数组中的数据进行后续的处理或应用。
相关问题
void adc_channel_init(uint32_t adc_periph, uint8_t adc_ch) { adc_init(adc_periph, adc_ch); } void Read_ADC(void) { static int i; for (i = 0; i < 5; i++) { ad_valu[0][i] = adc_get(ADC0, ADC_CH_10); ad_valu[1][i] = adc_get(ADC0, ADC_CH_11); ad_valu[4][i] = adc_get(ADC0, ADC_CH_12); ad_valu[5][i] = adc_get(ADC0, ADC_CH_13); ad_valu[6][i] = adc_get(ADC0, ADC_CH_15); } } unsigned int QAD[5]={0,1,4,5,6}; void Read_ADC(void) { static int i,j,k,temp;为什么最后的void Read_ADC(void)会出错,怎么修改
在您提供的代码中,存在两个相同名称的函数 `Read_ADC`,这导致编译错误。为了解决这个问题,您需要对其中一个函数进行重命名或删除其中一个函数。以下是两种可能的解决方案:
解决方案1:重命名函数
```c
void adc_channel_init(uint32_t adc_periph, uint8_t adc_ch)
{
adc_init(adc_periph, adc_ch);
}
void Read_ADC(void)
{
static int i;
for (i = 0; i < 5; i++) {
ad_valu[0][i] = adc_get(ADC0, ADC_CH_10);
ad_valu[1][i] = adc_get(ADC0, ADC_CH_11);
ad_valu[4][i] = adc_get(ADC0, ADC_CH_12);
ad_valu[5][i] = adc_get(ADC0, ADC_CH_13);
ad_valu[6][i] = adc_get(ADC0, ADC_CH_15);
}
// 其他操作或处理
}
void Another_Read_ADC(void) // 重命名函数为 Another_Read_ADC
{
static int i, j, k, temp;
// 函数体代码
}
unsigned int QAD[5] = {0, 1, 4, 5, 6};
```
解决方案2:删除冗余函数
```c
void adc_channel_init(uint32_t adc_periph, uint8_t adc_ch)
{
adc_init(adc_periph, adc_ch);
}
void Read_ADC(void)
{
static int i;
for (i = 0; i < 5; i++) {
ad_valu[0][i] = adc_get(ADC0, ADC_CH_10);
ad_valu[1][i] = adc_get(ADC0, ADC_CH_11);
ad_valu[4][i] = adc_get(ADC0, ADC_CH_12);
ad_valu[5][i] = adc_get(ADC0, ADC_CH_13);
ad_valu[6][i] = adc_get(ADC0, ADC_CH_15);
}
// 其他操作或处理
}
unsigned int QAD[5] = {0, 1, 4, 5, 6};
```
请根据您的实际需求选择其中一个解决方案,并根据您的具体情况进行适当的修改。这样可以确保函数命名的唯一性,并且可以消除编译错误。
void adc_channel_init(uint32_t adc_periph, uint8_t adc_ch) { adc_init(adc_periph, adc_ch); } unsigned int adc_get(uint32_t adc_periph, uint8_t adc_ch) { unsigned int adc_value; adc_value = adc_convert(adc_periph, adc_ch); //adcת»»Ò»´Î return adc_value; } unsigned int QAD[5]={0,1,4,5,6}; void Read_ADC(void) //5¸öµç¸Ð ¾«¶È12λ //µ÷ÊÔÒ»¶¨ÒªÓÃÉÏλ»ú£¬OLEDÌ«¡£¡£¡£¡£ { static int i,j,k,temp; for (i = 0; i < 5; i++) { ad_valu[0][i] = adc_regular_data_read(ADC0, ADC_CH_10); ad_valu[1][i] = adc_regular_data_read(ADC0, ADC_CH_11); ad_valu[4][i] = adc_regular_data_read(ADC0, ADC_CH_12); ad_valu[5][i] = adc_regular_data_read(ADC0, ADC_CH_13); ad_valu[6][i] = adc_regular_data_read(ADC0, ADC_CH_15); 怎么修改为正确代码
要修改代码以使其正确运行,您需要进行以下更改:
1. 添加 ADC 初始化函数:在 `Read_ADC` 函数之前,添加一个函数来初始化 ADC 通道。您可以使用 `adc_channel_init` 函数来进行初始化。以下是修改后的代码:
```c
void adc_channel_init(uint32_t adc_periph, uint8_t adc_ch)
{
adc_init(adc_periph, adc_ch);
}
```
2. 修改 ADC 读取逻辑:根据您的需求,将 ADC 通道的读取逻辑修改为使用 `adc_get` 函数。以下是修改后的代码:
```c
void Read_ADC(void)
{
static int i;
for (i = 0; i < 5; i++) {
ad_valu[0][i] = adc_get(ADC0, ADC_CH_10);
ad_valu[1][i] = adc_get(ADC0, ADC_CH_11);
ad_valu[4][i] = adc_get(ADC0, ADC_CH_12);
ad_valu[5][i] = adc_get(ADC0, ADC_CH_13);
ad_valu[6][i] = adc_get(ADC0, ADC_CH_15);
}
// 其他操作或处理
}
```
请注意,`adc_convert` 函数在代码中被修改为 `adc_get` 函数,以匹配您提供的函数定义。
3. 更新 ADC 通道定义:根据您的需求,将 ADC 通道的定义修改为正确的通道号。以下是示例代码中 `ad_valu` 数组的定义修改后的代码:
```c
unsigned int ad_valu[7][5] = {0}; // 定义一个二维数组来存储 ADC 转换结果
```
请根据您的实际需求调整数组的定义。
这些修改应该可以使您的代码在 GD32F303RCT6 单片机上正确运行。请确保已经包含正确的头文件,并正确配置了 ADC 外设和通道。如果您遇到任何问题,请提供更多的信息,以便我能够更好地帮助您。
阅读全文