STM32 ADC调试

STM32 ADC调试

使用火牛开发板自带的程序验证ADC的功能,怎么调试打印出来的ADC的值都是0,查看了ADC和DMA寄存器的设置也没什么问题,

修改了ADC的采用速率也不行后来从网上下到一个例子,down进去跑,竟然是正常的,比较了下代码关于ADC的设置都是一样的,

真奇怪的问题,到网站论坛上求助也没什么回复,我用正常的程序一段段替代运行不正常的程序,看看到底什么原因,最终问题发现了,

贴出来以免以后再次遇到:

不正常程序的代码的RCC_Configuration函数:

 

 void RCC_Configuration(void) {

/* 使能外设时钟 */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_ADC1, ENABLE);

}

 

正常程序的代码的RCC_Configuration函数:

 

void RCC_Configuration(void) {

/* 使能外设时钟 */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_ADC1, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

}

 

原来不是同一个时钟源出来的时钟是不能使用相同函数初始化的,可能这是一个很低级的错误,对于不太熟悉STM32 的人来说不见得那么

好发现,我也是初学者,只能说认识还太肤浅吧,也请没有注意过这方面问题的朋友以后可以从这方面入手查问题。 还有一个之前遇到的

问题,就是关于GPIO使用的问题,不知道是不是我哪里出了问题还是STM32就是这个样子就是一个按键例程,大概是这样的,我在设置GPIO的函数GPIO_Configuration里

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD, &GPIO_InitStructure);

就是LED连接的几个GPIO脚,我想控LED的亮和熄程序烧进去跑,是完全没有问题的,但是一旦我单步执行,跑到

  GPIO_SetBits(GPIOD, GPIO_Pin_8);或者

  GPIO_ResetBits(GPIOD, GPIO_Pin_9);

 

灯并没有反应,量GPIO脚,也一直是低,使用realview MDK4.11看GPIOD的寄存器,IDR和ODR寄存器都相应的置位了,

BSRR并没有反应,不知道是不是STM32就是这个样子还是我没正确使用。

 

果然是犯了愚蠢的错误,原来是realview MDK环境的设置有问题,把调试模式设置成软件仿真了,是工程打开时默认的。

设置好之后,单步执行就对了,汗颜啊。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值