专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
stm32ADC得到的数据用串口打印无结果,求大家指点
2019-10-15 04:44
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
9116
11
1074
本帖最后由 超级歪 于 2017-2-5 23:46 编辑
在学到ADC一节,想用串口把DAC得到的数据打印出来,结果没有反应,串口的配置用的是原子例程中自带的,并未作出修改,请大家帮我找一下原因 谢谢各位~
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
超级歪
1楼-- · 2019-10-15 08:52
啊哈,问题解决了,不是代码问题,可能是编译器当时优化的问题,我重启了一下电脑,从新编译以后,代码又可以正常运行了
加载中...
超级歪
2楼-- · 2019-10-15 14:16
本帖最后由 超级歪 于 2017-2-5 23:40 编辑
代码如下:
main函数部分:
#include "adc.h"
#include "delay.h"
#include "sys.h"
int main(void)
{ int test=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
adc_init();
while(1)
{
test=get_adc(ADC_Channel_1);
printf("the number is ");
USART_SendData(USART1, test);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
delay_ms(1000);
}
}
ADC配置部分:
#include"adc.h"
#include"delay.h"
void adc_init(void)//adc初始化
{
GPIO_InitTypeDef GPIO_InitStruct;
ADC_InitTypeDef ADC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_ADC1,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
ADC_DeInit(ADC1);
ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;
ADC_InitStruct.ADC_ScanConvMode=DISABLE;
ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;
ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStruct.ADC_NbrOfChannel=1;
ADC_Init(ADC1,&ADC_InitStruct);
ADC_ResetCalibration(ADC1);//使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
ADC_StartCalibration(ADC1); //开启AD校准
while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
}
u16 get_adc(u8 ch)//获取某一个通道转化结果
{
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1);
}
u16 get_adc_average(u8 ch , u8 times)//取平均值
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=get_adc(ch);
delay_ms(5);
}
return temp_val/times;
}
加载中...
Mylittledonkey
3楼-- · 2019-10-15 20:15
精彩回答 2 元偷偷看……
加载中...
超级歪
4楼-- · 2019-10-16 01:07
Mylittledonkey 发表于 2017-2-5 23:39
AD采样数据是16位,串口每次只能发送8位
还有一个很纳闷的问题想请教一下 每当我把adc_init()写出来的时候,即使不发送数据,串口也不能工作 ,而且我这里 PA9 PA10是串口,ADC1中我配置的是PB0
代码如下(只要注释掉adc_init(),串口就能正常工作,很是纳闷)
int main(void)
{
// int test=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
adc_init();//只要注释掉这行,串口立即正常工作
uart_init(115200); //串口初始化为115200
while(1)
{
//test=get_adc(ADC_Channel_0);
printf("the number is ");
// USART_SendData(USART1, test);//向串口1发送数据
// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
delay_ms(1000);
}
}
加载中...
超级歪
5楼-- · 2019-10-16 03:35
好像是出结果的,但是得等半个多小时串口才开始打印。。求大家告知原理
加载中...
caosix
6楼-- · 2019-10-16 08:41
这种 简单的事件,,用 CubeMX 图形化配置吧。。
用 HAL库 半小时 搞定。。只要你不追求 程序的精细。。
加载中...
1
2
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
代码如下:
main函数部分:
#include "adc.h"
#include "delay.h"
#include "sys.h"
int main(void)
{ int test=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
adc_init();
while(1)
{
test=get_adc(ADC_Channel_1);
printf("the number is ");
USART_SendData(USART1, test);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
delay_ms(1000);
}
}
ADC配置部分:
#include"adc.h"
#include"delay.h"
void adc_init(void)//adc初始化
{
GPIO_InitTypeDef GPIO_InitStruct;
ADC_InitTypeDef ADC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_ADC1,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
ADC_DeInit(ADC1);
ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;
ADC_InitStruct.ADC_ScanConvMode=DISABLE;
ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;
ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStruct.ADC_NbrOfChannel=1;
ADC_Init(ADC1,&ADC_InitStruct);
ADC_ResetCalibration(ADC1);//使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
ADC_StartCalibration(ADC1); //开启AD校准
while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
}
u16 get_adc(u8 ch)//获取某一个通道转化结果
{
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1);
}
u16 get_adc_average(u8 ch , u8 times)//取平均值
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=get_adc(ch);
delay_ms(5);
}
return temp_val/times;
}
还有一个很纳闷的问题想请教一下 每当我把adc_init()写出来的时候,即使不发送数据,串口也不能工作 ,而且我这里 PA9 PA10是串口,ADC1中我配置的是PB0
代码如下(只要注释掉adc_init(),串口就能正常工作,很是纳闷)
int main(void)
{
// int test=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
adc_init();//只要注释掉这行,串口立即正常工作
uart_init(115200); //串口初始化为115200
while(1)
{
//test=get_adc(ADC_Channel_0);
printf("the number is ");
// USART_SendData(USART1, test);//向串口1发送数据
// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
delay_ms(1000);
}
}
用 HAL库 半小时 搞定。。只要你不追求 程序的精细。。
一周热门 更多>