OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5339|回复: 16

自己焊的STM32F407VE的板子上电不正常

[复制链接]

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
发表于 2016-7-18 13:54:05 | 显示全部楼层 |阅读模式
5金钱
按照硬件手册焊了个STM32F407的板子,3.3V电源上电之后所以IO口输出1.6-1.8V左右的电压,没下程序不知道怎么回事,弄了几天了求解啊!!!
今天重新焊了,晶振都没上,只接了VCC和GND,还是那样的 求解!

原理图

原理图
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-18 13:56:07 | 显示全部楼层
最新进度  用示波器采不到IO口的波形,接上示波器之后IO口电压降到0V,其它依旧
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-18 14:03:47 | 显示全部楼层
自己顶
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-18 14:28:53 | 显示全部楼层
再顶顶
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-7-18 15:26:31 | 显示全部楼层
zouri456 发表于 2016-7-18 13:56
最新进度  用示波器采不到IO口的波形,接上示波器之后IO口电压降到0V,其它依旧


降到0应当是正常。
继续往下走,比如点个灯看看。


回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-18 16:20:02 | 显示全部楼层
xuande 发表于 2016-7-18 15:26
降到0应当是正常。
继续往下走,比如点个灯看看。

没有  ,就是单个IO口接入示波器探头之后电压降下去了
回复

使用道具 举报

3

主题

126

帖子

0

精华

高级会员

Rank: 4

积分
776
金钱
776
注册时间
2015-2-28
在线时间
251 小时
发表于 2016-7-18 16:24:03 | 显示全部楼层
本帖最后由 mingjie2015 于 2016-7-18 16:32 编辑

你先测试电源正常不?看能不能下载程序?再烧写IO输出高低的程序,再用示波器看一下波形,如果正常说明是好的,如果不正常,那就有问题了

STM32F4 IO口默认为输入的,你没烧程序,测试是无意义的
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-18 16:55:10 | 显示全部楼层
程序刚刚烧进去了  ,IO口还是输出都是1.6V左右,不管是否配置
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-18 17:18:17 | 显示全部楼层
求解!别沉
回复

使用道具 举报

3

主题

126

帖子

0

精华

高级会员

Rank: 4

积分
776
金钱
776
注册时间
2015-2-28
在线时间
251 小时
发表于 2016-7-18 17:43:27 | 显示全部楼层

你把你配置的程序发上来啊
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-19 09:52:56 | 显示全部楼层
#include "sys.h"
#include "delay.h"
#include "usart.h"
//#include "led.h"
//#include "beep.h"
//#include "key.h"


int main(void)
{

        u8 t;
        u8 len;       
        u16 times=0;  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏ輶·Ö×é2
        delay_init(168);                //Ñóê±3õê¼»ˉ
        uart_init(9600);        //′®¿ú3õê¼»ˉ2¨ìØÂêÎa115200
//        LED_Init();                                  //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú  
        while(1)
        {
                if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;//μÃμ½′Ë′νóêÕμ½μÄêy¾Y3¤¶è
                        printf("\r\nÄú·¢ËíμÄÏûÏ¢Îa:\r\n");
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(UART4, USART_RX_BUF[t]);         //&#207;ò′&#174;&#191;ú1·¢&#203;íêy&#190;Y
                                while(USART_GetFlagStatus(UART4,USART_FLAG_TC)!=SET);//μè′y·¢&#203;í&#189;áê&#248;
                        }
                        printf("\r\n\r\n");//2&#229;è&#235;&#187;&#187;DD
                        USART_RX_STA=0;
                }else
                {
                        times++;
                        if(times%5000==0)
                        {
                                printf("′&#174;&#191;úêμ&#209;é\r\n");
                                printf("first\r\n\r\n\r\n");
                        }
                        if(times%200==0)printf("&#199;&#235;ê&#228;è&#235;êy&#190;Y,ò&#212;&#187;&#216;3μ&#188;ü&#189;áê&#248;\r\n");  
//                        if(times%30==0)LED0=!LED0;//éá&#203;&#184;LED,ìáê&#190;&#207;μí3&#213;y&#212;ú&#212;&#203;DD.
                        delay_ms(10);   
                }
        }
}上面是主程序
串口程序:
#include "sys.h"
#include "usart.h"       
//////////////////////////////////////////////////////////////////////////////////          
//è&#231;1&#251;ê1ó&#195;ucos,&#212;ò°üà¨&#207;&#194;&#195;&#230;μ&#196;í·&#206;&#196;&#188;t&#188;′&#191;é.
#if SYSTEM_SUPPORT_UCOS
#include "includes.h"                                        //ucos ê1ó&#195;          
#endif

          
#if 1
#pragma import(__use_no_semihosting)            
//±ê×&#188;&#191;aDèòaμ&#196;&#214;§3&#214;oˉêy  

struct __FILE
{
        int handle;
};

FILE __stdout;      
//&#182;¨ò&#229;_sys_exit()ò&#212;±ü&#195;aê1ó&#195;°&#235;&#214;÷&#187;ú&#196;£ê&#189;   
                  // Device header
int _sys_exit(int x)
{
        x = x;
}
//&#214;&#216;&#182;¨ò&#229;fputcoˉêy

int fputc(int ch, FILE *f)
{        
        while((UART4->SR&0X40)==0);//&#209;-&#187;··¢&#203;í,&#214;±μ&#189;·¢&#203;ííê±&#207;   
        UART4->DR = (u8) ch;      
        return ch;
}
#endif

#if EN_UART4_RX    //è&#231;1&#251;ê1&#196;üá&#203;&#189;óê&#213;
//′&#174;&#191;ú1&#214;D&#182;&#207;·t&#206;&#241;3ìDò
//×¢òa,&#182;áè&#161;USARTx->SR&#196;ü±ü&#195;a&#196;a&#195;&#251;&#198;&#228;&#195;&#238;μ&#196;′í&#206;ó          
u8 USART_RX_BUF[USART_REC_LEN];     //&#189;óê&#213;&#187;o3&#229;,×&#238;′óUSART_REC_LEN&#184;&#246;×&#214;&#189;ú.
//&#189;óê&#213;×′ì&#172;
//bit15£&#172;        &#189;óê&#213;íê3é±ê&#214;&#190;
//bit14£&#172;        &#189;óê&#213;μ&#189;0x0d
//bit13~0£&#172;        &#189;óê&#213;μ&#189;μ&#196;óDD§×&#214;&#189;úêy&#196;&#191;
u16 USART_RX_STA=0;       //&#189;óê&#213;×′ì&#172;±ê&#188;&#199;       

//3&#245;ê&#188;&#187;ˉIO ′&#174;&#191;ú1
//bound:2¨ì&#216;&#194;ê
void uart_init(u32 bound){
   //GPIO&#182;&#203;&#191;úéè&#214;&#195;
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //ê1&#196;üGPIOAê±&#214;ó
        RCC_APB2PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);//ê1&#196;üUSART1ê±&#214;ó

        //′&#174;&#191;ú1&#182;&#212;ó|òy&#189;&#197;&#184;′ó&#195;ó3é&#228;
       

       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0        ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//&#184;′ó&#195;1|&#196;ü
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //&#203;ù&#182;è50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //í&#198;íì&#184;′ó&#195;ê&#228;3&#246;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //é&#207;à-
        GPIO_Init(GPIOA,&GPIO_InitStructure);       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1        ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //&#203;ù&#182;è50MHz
        GPIO_Init(GPIOA,&GPIO_InitStructure);       

   //USART1 3&#245;ê&#188;&#187;ˉéè&#214;&#195;
        USART_InitStructure.USART_BaudRate = bound;//2¨ì&#216;&#194;êéè&#214;&#195;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;//&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ê&#213;·¢&#196;£ê&#189;
  USART_Init(UART4, &USART_InitStructure); //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú1
       
  USART_Cmd(UART4, ENABLE);  //ê1&#196;ü′&#174;&#191;ú1
       
        USART_ClearFlag(UART4, USART_FLAG_TC);
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;            
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_SetBits(GPIOA,GPIO_Pin_2);        
       
#if EN_UART4_RX       
        USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;&#207;à1&#216;&#214;D&#182;&#207;

        //Usart1 NVIC &#197;&#228;&#214;&#195;
  NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;//′&#174;&#191;ú1&#214;D&#182;&#207;í¨μà
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                //×óó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);        //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷&#161;¢

#endif
       
}


void UART4_IRQHandler(void)                        //′&#174;&#191;ú1&#214;D&#182;&#207;·t&#206;&#241;3ìDò
{
        u8 Res;
#ifdef OS_TICKS_PER_SEC                 //è&#231;1&#251;ê±&#214;ó&#189;ú&#197;&#196;êy&#182;¨ò&#229;á&#203;,&#203;μ&#195;÷òaê1ó&#195;ucosIIá&#203;.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //&#189;óê&#213;&#214;D&#182;&#207;(&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y±&#216;D&#235;ê&#199;0x0d 0x0a&#189;á&#206;2)
        {
                Res =USART_ReceiveData(USART2);//(USART1->DR);        //&#182;áè&#161;&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y
               
                if((USART_RX_STA&0x8000)==0)//&#189;óê&#213;&#206;′íê3é
                {
                        if(USART_RX_STA&0x4000)//&#189;óê&#213;μ&#189;á&#203;0x0d
                        {
                                if(Res!=0x0a)USART_RX_STA=0;//&#189;óê&#213;′í&#206;ó,&#214;&#216;D&#194;&#191;aê&#188;
                                else USART_RX_STA|=0x8000;        //&#189;óê&#213;íê3éá&#203;
                        }
                        else //&#187;1&#195;&#187;ê&#213;μ&#189;0X0D
                        {       
                                if(Res==0x0d)USART_RX_STA|=0x4000;
                                else
                                {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//&#189;óê&#213;êy&#190;Y′í&#206;ó,&#214;&#216;D&#194;&#191;aê&#188;&#189;óê&#213;          
                                }                 
                        }
                }                    
  }
#ifdef OS_TICKS_PER_SEC                 //è&#231;1&#251;ê±&#214;ó&#189;ú&#197;&#196;êy&#182;¨ò&#229;á&#203;,&#203;μ&#195;÷òaê1ó&#195;ucosIIá&#203;.
        OSIntExit();                                                                                           
#endif
}
#endif       

用的正点原子的程序,自己改了一下



回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-7-20 22:28:22 | 显示全部楼层
下载代码,测试控制一个单独的IO口,看看能否正常控制
回复

使用道具 举报

2

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2015-1-19
在线时间
26 小时
发表于 2016-7-20 23:54:14 来自手机 | 显示全部楼层
所有IO都不受控?把jtag禁止了试试
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-21 09:11:10 | 显示全部楼层
可以了,今天调试程序下载进去了,但是主程序好像运行不成功,我COM口和板子的地线连接起来之后无法通信,不连接的话返回发送的数据,本人十足的新手,求各位帮帮忙
main函数:
#include "sys.h"
#include "delay.h"
#include "usart.h"
//#include "led.h"
//#include "beep.h"
//#include "key.h"


int fputc(int ch, FILE *f)
{        
        USART_SendData(UART4, (unsigned char) ch);// USART1 ???? USART2 ?
        while (!(UART4->SR & USART_FLAG_TXE));
        return (ch);
}

int main(void)
{

        u8 t;
        u8 len;       

        u16 times=0;  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#207;μí3&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é2
        delay_init(168);                //&#209;óê±3&#245;ê&#188;&#187;ˉ
        uart_init(9600);        //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ2¨ì&#216;&#194;ê&#206;a115200
//        LED_Init();                                  //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú  
        while(1)
        {
                if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;//μ&#195;μ&#189;′&#203;′&#206;&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y3¤&#182;è
                        printf("\r\n&#196;ú·¢&#203;íμ&#196;&#207;&#251;&#207;¢&#206;a:\r\n");
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(UART4, USART_RX_BUF[t]);         //&#207;ò′&#174;&#191;ú1·¢&#203;íêy&#190;Y
                                while(USART_GetFlagStatus(UART4,USART_FLAG_TC)!=SET);//μè′y·¢&#203;í&#189;áê&#248;
                        }
                        printf("\r\n\r\n");//2&#229;è&#235;&#187;&#187;DD
                        USART_RX_STA=0;
                }else
                {
                        times++;
                        if(times%5000==0)
                        {
                                printf("′&#174;&#191;úêμ&#209;é\r\n");
                                printf("first\r\n\r\n\r\n");
                        }
                        if(times%200==0)printf("&#199;&#235;ê&#228;è&#235;êy&#190;Y,ò&#212;&#187;&#216;3μ&#188;ü&#189;áê&#248;\r\n");  
//                        if(times%30==0)LED0=!LED0;//éá&#203;&#184;LED,ìáê&#190;&#207;μí3&#213;y&#212;ú&#212;&#203;DD.
                        delay_ms(10);   
                }
        }
}
屏蔽了按键,蜂鸣器和led函数,大家帮我看看,麻烦了。
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-21 09:15:31 | 显示全部楼层
正点原子 发表于 2016-7-20 22:28
下载代码,测试控制一个单独的IO口,看看能否正常控制

可以的  ,IO口受控了,我现在没有连接外部时钟,就是程序printf函数好像没有运行,我COM口和板子的地线连接起来之后无法通信,不连接的话返回发送的数据,我用的是你的F407ZETX的串口实验的程序,我把USART1改成了UART4。原子哥抽空帮我看看,程序我都贴上来了,谢谢了
回复

使用道具 举报

3

主题

126

帖子

0

精华

高级会员

Rank: 4

积分
776
金钱
776
注册时间
2015-2-28
在线时间
251 小时
发表于 2016-7-23 13:32:24 | 显示全部楼层
你时钟配置对了吗
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-7-18
在线时间
13 小时
 楼主| 发表于 2016-7-26 16:12:28 | 显示全部楼层
mingjie2015 发表于 2016-7-23 13:32
你时钟配置对了吗

现在的情况就是我发送什么数据就返回什么数据,我看程序好像不是这样啊,与预期结果不一致啊
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 20:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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