专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM8S ADC 通道的值互换了,为什么
2019-07-19 21:30
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
5793
9
962
最近用STM8S105K4做个项目,要用到ADC的功能,用到的通道是AIN0(PB0)和
AIN
1.测试的时候发现,
AIN0的值变成了
AIN1,
AIN1的值变成了
AIN0了,即两者互换了。请高手指教下,谢谢
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
aleelau
2019-07-20 09:49
/* 全局变量定义 */
static uint16_t OneChannelGetADValue(ADC1_Channel_TypeDef ADC1_Channel,ADC1_SchmittTrigg_TypeDef ADC1_SchmittTriggerChannel);
static void Delay(u16 nCount);
/*******************************************************************************
* 名称: ADC_Init
* 功能: adc2初始化操作
* 形参: 无
* 返回: 无
* 说明: ADC2_Init函数的形参不能使用或运算初始化多通道ADC
******************************************************************************/
void ADC_Init(void)
{
/**< 连续转换模式 */
/**< 使能通道 */
/**< ADC时钟:fADC1 = fcpu/18 */
/**< 这里设置了从TIM TRGO 启动转换,但实际是没有用到的*/
/** 不使能 ADC2_ExtTriggerState**/
/**< 转换数据右对齐 */
/**< 不使能通道0的斯密特触发器 */
/** 不使能通道0的斯密特触发器状态 */
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS , ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D18,
ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0,DISABLE);
ADC1_Cmd(ENABLE);
}
/**************************************************************************
* 函数名:Send_ADC_Value
* 描述 :ADC转换结果显示函数
* 输入 :AD_Value--ADC转换结果值
*
* 输出 :无
* 返回 :无
* 调用 :内部调用
*************************************************************************/
void Send_ADC_Value(u16 AD_Value)
{
UART2_SendByte(AD_Value/1000+0x30);
UART2_SendByte(AD_Value%1000/100+0x30);
UART2_SendByte(AD_Value%1000%100/10+0x30);
UART2_SendByte(AD_Value%1000%100%10+0x30);
}
/**************************************************************************
* 函数名:MultipleChannelGetADValue
* 描述 :打印ADC多通道读取AD值
* 输入 :无
*
* 输出 :无
* 返回 :无
* 调用 :外部调用
*************************************************************************/
void MultipleChannelGetADValue(void)
{
UART2_printf(" 当前AD Channel is ADC1_CHANNEL_0,Value=%d ",
OneChannelGetADValue(ADC1_CHANNEL_0,ADC1_SCHMITTTRIG_CHANNEL0));
//printf(" 当前AD Channel is ADC1_CHANNEL_0,Value=%d ",
OneChannelGetADValue(ADC1_CHANNEL_0,ADC1_SCHMITTTRIG_CHANNEL0));
Delay(0xffff);
UART2_printf(" 当前AD Channel is ADC1_CHANNEL_1,Value=%d ",
OneChannelGetADValue(ADC1_CHANNEL_1,ADC1_SCHMITTTRIG_CHANNEL1));
// printf(" 当前AD Channel is ADC1_CHANNEL_1,Value=%d ",
OneChannelGetADValue(ADC1_CHANNEL_1,ADC1_SCHMITTTRIG_CHANNEL1));
Delay(0xffff);
}
/*******************************************************************************
* 名称: OneChannelGetADValue
* 功能: ADC1单通道选择读取AD值
* 形参: ADC1_Channel,ADC1_SchmittTriggerChannel
* 返回: 该通道的AD值
* 说明: 当要读取多通道AD值采调用该函数,否则只是初始化ADC_Init即可
******************************************************************************/
static uint16_t OneChannelGetADValue(ADC1_Channel_TypeDef ADC1_Channel,
ADC1_SchmittTrigg_TypeDef ADC1_SchmittTriggerChannel)
{
uint16_t ADConversion_Value;
/**< 连续转换模式 */
/**< 使能通道 */
/**< ADC时钟:fADC1 = fcpu/18 */
/**< 这里设置了从TIM TRGO 启动转换,但实际是没有用到的*/
/** 不使能 ADC1_ExtTriggerState**/
/**< 转换数据右对齐 */
/**< 不使能通道10的斯密特触发器 */
/** 不使能通道10的斯密特触发器状态 */
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS , ADC1_Channel, ADC1_PRESSEL_FCPU_D18,
ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SchmittTriggerChannel,DISABLE);
ADC1_Cmd(ENABLE);
ADC1_StartConversion();
ADConversion_Value = ADC1_GetConversionValue();
return ADConversion_Value;
}
加载中...
查看其它9个回答
一周热门
更多
>
相关问题
相关文章
嵌入式编译生成的HEX文件和BIN文件内容详解
0个评论
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
单片机中把部分Flash虚拟成Eeprom使用时,如何延长使用寿命
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
敢问路在何方,STM32迈出的第一步,却注定了它非凡的一生
0个评论
年工作时间真的就等于3年工作经验?也许你就不配
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
/* 全局变量定义 */
static uint16_t OneChannelGetADValue(ADC1_Channel_TypeDef ADC1_Channel,ADC1_SchmittTrigg_TypeDef ADC1_SchmittTriggerChannel);
static void Delay(u16 nCount);
/*******************************************************************************
* 名称: ADC_Init
* 功能: adc2初始化操作
* 形参: 无
* 返回: 无
* 说明: ADC2_Init函数的形参不能使用或运算初始化多通道ADC
******************************************************************************/
void ADC_Init(void)
{
/**< 连续转换模式 */
/**< 使能通道 */
/**< ADC时钟:fADC1 = fcpu/18 */
/**< 这里设置了从TIM TRGO 启动转换,但实际是没有用到的*/
/** 不使能 ADC2_ExtTriggerState**/
/**< 转换数据右对齐 */
/**< 不使能通道0的斯密特触发器 */
/** 不使能通道0的斯密特触发器状态 */
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS , ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D18,
ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0,DISABLE);
ADC1_Cmd(ENABLE);
}
/**************************************************************************
* 函数名:Send_ADC_Value
* 描述 :ADC转换结果显示函数
* 输入 :AD_Value--ADC转换结果值
*
* 输出 :无
* 返回 :无
* 调用 :内部调用
*************************************************************************/
void Send_ADC_Value(u16 AD_Value)
{
UART2_SendByte(AD_Value/1000+0x30);
UART2_SendByte(AD_Value%1000/100+0x30);
UART2_SendByte(AD_Value%1000%100/10+0x30);
UART2_SendByte(AD_Value%1000%100%10+0x30);
}
/**************************************************************************
* 函数名:MultipleChannelGetADValue
* 描述 :打印ADC多通道读取AD值
* 输入 :无
*
* 输出 :无
* 返回 :无
* 调用 :外部调用
*************************************************************************/
void MultipleChannelGetADValue(void)
{
UART2_printf(" 当前AD Channel is ADC1_CHANNEL_0,Value=%d ",
OneChannelGetADValue(ADC1_CHANNEL_0,ADC1_SCHMITTTRIG_CHANNEL0));
//printf(" 当前AD Channel is ADC1_CHANNEL_0,Value=%d ",
OneChannelGetADValue(ADC1_CHANNEL_0,ADC1_SCHMITTTRIG_CHANNEL0));
Delay(0xffff);
UART2_printf(" 当前AD Channel is ADC1_CHANNEL_1,Value=%d ",
OneChannelGetADValue(ADC1_CHANNEL_1,ADC1_SCHMITTTRIG_CHANNEL1));
// printf(" 当前AD Channel is ADC1_CHANNEL_1,Value=%d ",
OneChannelGetADValue(ADC1_CHANNEL_1,ADC1_SCHMITTTRIG_CHANNEL1));
Delay(0xffff);
}
/*******************************************************************************
* 名称: OneChannelGetADValue
* 功能: ADC1单通道选择读取AD值
* 形参: ADC1_Channel,ADC1_SchmittTriggerChannel
* 返回: 该通道的AD值
* 说明: 当要读取多通道AD值采调用该函数,否则只是初始化ADC_Init即可
******************************************************************************/
static uint16_t OneChannelGetADValue(ADC1_Channel_TypeDef ADC1_Channel,
ADC1_SchmittTrigg_TypeDef ADC1_SchmittTriggerChannel)
{
uint16_t ADConversion_Value;
/**< 连续转换模式 */
/**< 使能通道 */
/**< ADC时钟:fADC1 = fcpu/18 */
/**< 这里设置了从TIM TRGO 启动转换,但实际是没有用到的*/
/** 不使能 ADC1_ExtTriggerState**/
/**< 转换数据右对齐 */
/**< 不使能通道10的斯密特触发器 */
/** 不使能通道10的斯密特触发器状态 */
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS , ADC1_Channel, ADC1_PRESSEL_FCPU_D18,
ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SchmittTriggerChannel,DISABLE);
ADC1_Cmd(ENABLE);
ADC1_StartConversion();
ADConversion_Value = ADC1_GetConversionValue();
return ADConversion_Value;
}
一周热门 更多>