专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
为什么串口没有接收到数据?
2019-07-21 03:58
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
7381
7
917
我用的是STM32F030RCT6芯片,usart2接收ADC电压,想用usart3发送到串口,为什么串口没接收到? 求大神告知!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
1599064432
2019-07-21 09:48
#include "NTCtp.h"
#include "stdio.h"
#include "math.h"
#include "timer.h"
#include "usart.h"
uint32_t Resultvolt;
void NTCtp_config(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
SysTick_Config_Init();
NTCtp_gpio_config();
NTCtp_usart_config();
NTCtp_nvic_config();
usart_release_gpio_int();
adc_config();
}
void NTCtp_gpio_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; //采集电压
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //串口2
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);
}
void NTCtp_usart_config(void)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600; /*波特率*/
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /*流控*/
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_InitStructure.USART_WordLength = USART_WordLength_8b; /*数据位,8*/
USART_InitStructure.USART_Parity = USART_Parity_No; /*校验位,n*/
USART_InitStructure.USART_StopBits = USART_StopBits_1; /*停止位,1*/
USART_Init(USART2,&USART_InitStructure);
USART_ClearFlag(USART2,USART_FLAG_TC); //清除发送完成标志位
USART_Cmd(USART2,ENABLE); //使能串口3
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
}
void NTCtp_nvic_config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
int fputc(int ch, FILE *f) //IAR重定向printf函数
{
//while (USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET )
while (USART_GetFlagStatus(USART3,USART_FLAG_TXE) == RESET )
{
}
USART_SendData(USART3,(uint8_t) ch);
return ch;
}
void adc_config(void)
{
ADC_DeInit(ADC1); //初始化
ADC_InitTypeDef ADC_InitStructure;
ADC_StructInit(&ADC_InitStructure);
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //转换使能
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //右对齐
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; //12位分辨率
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward; //浏览方向
ADC_Init(ADC1,&ADC_InitStructure);
ADC_ChannelConfig(ADC1, ADC_Channel_3, ADC_SampleTime_239_5Cycles); //PA3 通道3 USART2
ADC_GetCalibrationFactor(ADC1); //校验
ADC_Cmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY)); //等待就绪
ADC_StartOfConversion(ADC1); //启动ADC
}
uint32_t ADC_Check(void)
{
uint8_t i;
for(i=0; i<2; i++)
{
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
Resultvolt = (uint32_t) ADC_GetConversionValue(ADC1);
}
Resultvolt = (Resultvolt*3300)/4096; //1000倍
return Resultvolt;
}
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断读寄存器是否有数据
{
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除发送完成标志位
Resultvolt = USART_ReceiveData(USART2);
}
}
int main()
{
static uint32_t led_timer = 0;
static uint32_t usart_timer = 0;
SysTick_Config_Init();
led_gpio_init();
NTCtp_config();
while(1)
{
if (tick1ms - led_timer >= 500)
{
led_timer = tick1ms;
//GPIO_ResetBits(GPIOB,GPIO_Pin_7);
GPIOB->ODR ^= GPIO_Pin_7;
}
if (tick1ms - usart_timer >= 500)
{
usart_timer = tick1ms;
ADC_Check(); //采集电压
printf("电压是%d ",Resultvolt);
}
}
}
这边是部分代码
加载中...
查看其它7个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include "stdio.h"
#include "math.h"
#include "timer.h"
#include "usart.h"
uint32_t Resultvolt;
void NTCtp_config(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
SysTick_Config_Init();
NTCtp_gpio_config();
NTCtp_usart_config();
NTCtp_nvic_config();
usart_release_gpio_int();
adc_config();
}
void NTCtp_gpio_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; //采集电压
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //串口2
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);
}
void NTCtp_usart_config(void)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600; /*波特率*/
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /*流控*/
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_InitStructure.USART_WordLength = USART_WordLength_8b; /*数据位,8*/
USART_InitStructure.USART_Parity = USART_Parity_No; /*校验位,n*/
USART_InitStructure.USART_StopBits = USART_StopBits_1; /*停止位,1*/
USART_Init(USART2,&USART_InitStructure);
USART_ClearFlag(USART2,USART_FLAG_TC); //清除发送完成标志位
USART_Cmd(USART2,ENABLE); //使能串口3
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
}
void NTCtp_nvic_config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
int fputc(int ch, FILE *f) //IAR重定向printf函数
{
//while (USART_GetFlagStatus(USART3,USART_FLAG_TC) == RESET )
while (USART_GetFlagStatus(USART3,USART_FLAG_TXE) == RESET )
{
}
USART_SendData(USART3,(uint8_t) ch);
return ch;
}
void adc_config(void)
{
ADC_DeInit(ADC1); //初始化
ADC_InitTypeDef ADC_InitStructure;
ADC_StructInit(&ADC_InitStructure);
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //转换使能
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //右对齐
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; //12位分辨率
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward; //浏览方向
ADC_Init(ADC1,&ADC_InitStructure);
ADC_ChannelConfig(ADC1, ADC_Channel_3, ADC_SampleTime_239_5Cycles); //PA3 通道3 USART2
ADC_GetCalibrationFactor(ADC1); //校验
ADC_Cmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY)); //等待就绪
ADC_StartOfConversion(ADC1); //启动ADC
}
uint32_t ADC_Check(void)
{
uint8_t i;
for(i=0; i<2; i++)
{
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
Resultvolt = (uint32_t) ADC_GetConversionValue(ADC1);
}
Resultvolt = (Resultvolt*3300)/4096; //1000倍
return Resultvolt;
}
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断读寄存器是否有数据
{
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除发送完成标志位
Resultvolt = USART_ReceiveData(USART2);
}
}
int main()
{
static uint32_t led_timer = 0;
static uint32_t usart_timer = 0;
SysTick_Config_Init();
led_gpio_init();
NTCtp_config();
while(1)
{
if (tick1ms - led_timer >= 500)
{
led_timer = tick1ms;
//GPIO_ResetBits(GPIOB,GPIO_Pin_7);
GPIOB->ODR ^= GPIO_Pin_7;
}
if (tick1ms - usart_timer >= 500)
{
usart_timer = tick1ms;
ADC_Check(); //采集电压
printf("电压是%d ",Resultvolt);
}
}
}
这边是部分代码
一周热门 更多>