OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3265|回复: 4

关于STM32F103c8t6

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2015-7-28
在线时间
0 小时
发表于 2015-7-28 21:40:34 | 显示全部楼层 |阅读模式
5金钱
大家都知道,上述的那个芯片只有一个ADC,这是前提。我曾经用过带三个ADC的芯片(STM32f103vx),我把用基于这个芯片上的程序下载到前面的那个低级一点的芯片(STM32F103c8t6)里边,实验的感觉是AD不工作的,我认为应该是我的ADC配置有问题(毕竟芯片内部资源不同),我的改正也没有依据,我进行了这样的改正:以前在高级芯片上用的是C0口的复用功能的ADC1第十个通道,再查过低级芯片的下面原理图后我改成了A1口的复用功能ADC的1通道,但是在程序里只写ADC是编译错误的,我只能把ADC改成ADC1。请教各位大神..下面是具体程序:
[mw_shl_code=c,true]#include "pbdata.h" void RCC_Configuration(void); void GPIO_Configuration(void); void ADC_Configuration(void); int main(void) { u32 ad=0,ad1=0; u8 i=0; RCC_Configuration(); GPIO_Configuration(); ADC_Configuration(); while(1) { ad=0; for(i=0;i<50;i++) { ADC_SoftwareStartConvCmd(ADC1,ENABLE); while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); ad=ad+ADC_GetConversionValue(ADC1); } ad=ad/50; ad1=3.3/4095*ad; if(ad1>2) { GPIO_ResetBits(GPIOB,GPIO_Pin_8); } } } void RCC_Configuration(void) { SystemInit();//72m RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开LED所在IO口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12M } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//LED GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//ADC GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟输入 GPIO_Init(GPIOA,&GPIO_InitStructure); } void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode=DISABLE; ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel=1; ADC_Init(ADC1,&ADC_InitStructure); ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5); ADC_Cmd(ADC1,ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1,ENABLE); } [/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

回复【3楼】FantaSy_: ------------------------------- 是的,我用的是3.0的库。不好意思,我后面想了一下,上面的那个程序有点问题。我的想法是:当AD采集到的电压值大于2V时,LED发光,我少写了让LED熄灭的语句,在if后面加了一句else{GPIO_SetBits(GPIOB,GPIO_Pin_8);},发现程序能按我的想法执行了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2015-7-28
在线时间
0 小时
 楼主| 发表于 2015-7-28 21:40:35 | 显示全部楼层
回复【3楼】FantaSy_:
-------------------------------
是的,我用的是3.0的库。不好意思,我后面想了一下,上面的那个程序有点问题。我的想法是:当AD采集到的电压值大于2V时,LED发光,我少写了让LED熄灭的语句,在if后面加了一句else{GPIO_SetBits(GPIOB,GPIO_Pin_8);},发现程序能按我的想法执行了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-28 22:51:37 | 显示全部楼层
帮顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2015-7-29 00:01:55 | 显示全部楼层
你是不是用3.0的库啊???
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2015-7-29 10:05:36 | 显示全部楼层
回复【4楼】a5484946:
---------------------------------
找到问题就好。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 09:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表