找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4046|回复: 4
收起左侧

STM32F103C8T6最小板 串口1没有输出,请帮忙解决

[复制链接]
ID:492339 发表于 2019-4-4 23:10 | 显示全部楼层 |阅读模式
100黑币
论坛下载的STM32F103C8T6八路ADC串口输出程序,仿真时有输出,但PA9 和PA10都波形都是0,下载到板子上串口没有输出
/**
* 文件名  :main.c
* 描述    :串口1(USART1)向电脑的超级终端以1s为间隔打印当前ADC1的转换电压值         
* 实验平台:MINI STM32开发板 基于STM32F103C8T6
* 库版本  :ST3.0.0

**********************************************************************************/

#include "stm32f10x.h"
#include "usart1.h"
#include "adc.h"      
#include "stdio.h"
extern __IO u16 ADC_ConvertedValue[9];         
// 软件延时
void Delay(unsigned long time)
{unsigned long i,j;

        for(j=0; j<time; j++)
        {
           for(i=0;i<12000;i++);
        }
}


int main(void)
{
volatile u32 AD1_value,AD2_value,AD3_value,AD4_value,AD5_value,AD6_value,AD7_value,AD8_value;         
  /* 配置系统时钟为72M */      
  SystemInit();        
  /* 配置串口 */
  USART1_Config();
  /* 初始化ADC1 */
  ADC1_Init();

  printf("\r\n -------这是一个ADC实验------\r\n");
  printf("\r\n -------ADC采样的是PA0口------\r\n");

  while (1)
  {
                           Delay(500);
                 AD1_value  = 3300000/4096*ADC_ConvertedValue[0]/1000*1.53;
                 AD2_value  = 3300000/4096*ADC_ConvertedValue[1]/1000*1.53;
                 AD3_value  = 3300000/4096*ADC_ConvertedValue[2]/1000*1.53;
                 AD4_value  = 3300000/4096*ADC_ConvertedValue[3]/1000*1.53;
           
                 AD5_value  = 3300000/4096*ADC_ConvertedValue[4]/1000*1.53;
                 AD6_value  = 3300000/4096*ADC_ConvertedValue[5]/1000*1.53;
                 AD7_value  = 3300000/4096*ADC_ConvertedValue[6]/1000*1.53;
                 AD8_value  = 3300000/4096*ADC_ConvertedValue[7]/1000*1.53;
               
           printf("AD1 value = %d mV  \r\n", AD1_value);
                 printf("AD2 value = %d mV  \r\n", AD2_value);
                 printf("AD3 value = %d mV  \r\n", AD3_value);
                 printf("AD4 value = %d mV  \r\n", AD4_value);
               
           printf("AD5 value = %d mV  \r\n", AD5_value);
                 printf("AD6 value = %d mV  \r\n", AD6_value);
                 printf("AD7 value = %d mV  \r\n", AD7_value);
                 printf("AD8 value = %d mV  \r\n", AD8_value);

               


  }
}





/********
* 文件名  :usart1.c
* 描述    :将printf函数重定向到USART1。这样就可以用printf函数将单片机的数据
*           打印到PC上的超级终端或串口调试助手。         
* 实验平台:MINI STM32开发板 基于STM32F103C8T6
* 硬件连接:------------------------
*          | PA9  - USART1(Tx)      |
*          | PA10 - USART1(Rx)      |
*           ------------------------
* 库版本  :ST3.0.0  *

**********************************************************************************/

#include "usart1.h"
#include <stdarg.h>
#include <stdio.h>

void USART1_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        /* 使能 USART1 时钟*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
        /* USART1 使用IO端口配置 */   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);   

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //浮空输入
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);   //初始化GPIOA
         
        /* USART1 工作模式配置 */
        USART_InitStructure.USART_BaudRate = 115200;        //波特率设置:115200
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;        //数据位数设置:8位
        USART_InitStructure.USART_StopBits = USART_StopBits_1;         //停止位设置:1位
        USART_InitStructure.USART_Parity = USART_Parity_No ;  //是否奇偶校验:无
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;        //硬件流控制模式设置:没有使能
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//接收与发送都使能
        USART_Init(USART1, &USART_InitStructure);  //初始化USART1
        USART_Cmd(USART1, ENABLE);// USART1使能
}


/* 描述  :重定向c库函数printf到USART1*/
int fputc(int ch, FILE *f)
{
/* 将Printf内容发往串口 */
  USART_SendData(USART1, (unsigned char) ch);
  while (!(USART1->SR & USART_FLAG_TXE));

  return (ch);
}

STM32F103C8T6八路ADC123.7z

145.58 KB, 下载次数: 12

回复

使用道具 举报

ID:94031 发表于 2019-4-5 09:30 | 显示全部楼层
程序没有问题,要在其他方面找原因,可以仿真一下看问题出在那里。
回复

使用道具 举报

ID:481641 发表于 2019-4-5 16:31 | 显示全部楼层
用仿真或者调试一下
回复

使用道具 举报

ID:546286 发表于 2019-7-25 16:43 | 显示全部楼层
我也遇到类似问题,不知道怎么解决。。。。。
回复

使用道具 举报

ID:542954 发表于 2019-8-11 20:06 | 显示全部楼层
用上位机看看是怎么回事吧
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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