打印
[应用相关]

【转】STM32 ADC调试

[复制链接]
549|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
联通移不动|  楼主 | 2017-2-15 12:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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环境的设置有问题,把调试模式设置成软件仿真了,是工程打开时默认的。

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


发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

127

帖子

0

粉丝