F4的板子为什么同样串口一,用原子例程没现象,多加一句函数就有现象了?

2019-07-20 06:31发布

原子的
[mw_shl_code=applescript,true]#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"

//ALIENTEK ì½Ë÷ÕßSTM32F407¿a·¢°å êμÑé0
//STM32F41¤3ìÄ£°å-¿aoˉêy°æ±¾
//¼¼êõÖ§3Ö£owww.openedv.com
//ìÔ±|μêÆì£ohttp://eboard.taobao.com
//1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾  
//×÷ÕߣoÕyμãÔ-×ó @ALIENTEK


void My_USART1_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//ê1ÄüUSART1ê±Öó
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        USART_InitStructure.USART_BaudRate=9600;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
       
        USART_Init(USART1,&USART_InitStructure);
        USART_Cmd(USART1 ,ENABLE);
  
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
       
        NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStructure);       
}

void USART1_IRQHandler(void)
{
        u8 res;
        if(USART_GetITStatus(USART1,USART_IT_RXNE))
        {               
                res=USART_ReceiveData(USART1);
                USART_SendData(USART1,res);
        }

}
int main(void)
{
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        My_USART1_Init();
        while(1);
}
[/mw_shl_code]



多一句函数的
#include "includes.h"
#include "stm32f4xx.h"
#include "USART.h"

void USART_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStruct;
        NVIC_InitTypeDef NVIC_InitStructure;
        //////////////////////ê±ÖóÅäÖÃ//////////////////////////////
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);                //′ò¿aGPIOê±Öó
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);                //′ò¿a′®¿úê±Öó
       
        //////////////////////¶Ë¿úÅäÖÃ//////////////////////////////
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);        //¶Ë¿úÖØó3éä
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);        //¶Ë¿úÖØó3éä

        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                                //íÆíìÄ£ê½
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                                //éÏà-Ä£ê½
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                                //±¸óÃ1|Äü
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                        //êä3öÆμÂê

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                        //Ñ¡ÔñTXòy½Å
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                                //ÅäÖÃ

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                                        //Ñ¡ÔñRXòy½Å
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                                //ÅäÖÃ
       
        //////////////////////USARTÅäÖÃ//////////////////////////////
        USART_InitStruct.USART_BaudRate = 9600;                                                //ÅäÖÃ2¨ìØÂê
        USART_InitStruct.USART_WordLength = USART_WordLength_8b;        //êy¾YλÎa8λ
        USART_InitStruct.USART_StopBits = USART_StopBits_1;                        //í£Ö1λÎa1λ
        USART_InitStruct.USART_Parity = USART_Parity_No;                        //ÎTÆæżD£Ñé
        USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//á÷¿ØÖÆ ÎT
        USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//ê1Äü·¢Ëí½óêÕ
        USART_Init(USART1, &USART_InitStruct);                                                //ÅäÖÃ3õê¼»ˉ
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                                //ê1Äü½óêÕÖD¶Ï
        USART_Cmd(USART1, ENABLE);                                                                        //′ò¿a′®¿ú£¬¿aê¼1¤×÷
       
        /////////////////////////óÅÏ輶ÅäÖÃ////////////////////////////////
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                                //Ƕì×·Ö×é2
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;                         //ÖD¶Ïí¨μà
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        //Ö¸¶¨ÇàÕ¼ê½óÅÏ輶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                        //Ö¸¶¨Ïìó|óÅÏ輶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                //ÆôóÃÖD¶Ï
        NVIC_Init(&NVIC_InitStructure);
}
//1|Äü½ééü£o′®DDí¨DÅ»Øμ÷oˉêy
//·μ»ØÖμ  £oÎT
//2Îêy    £oÎT
void USART1_IRQHandler(void)
{       
        unsigned char dat;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)                //2éÑˉÖD¶Ï
        {                         
                dat = USART_ReceiveData(USART1);                                                //½óêÕêy¾Y£¬±£′æÔúdatÄú
               
                //′òó¡oˉêyò»°ã2»ÔùÖD¶ÏàïÃæμ÷óã¬Õaàï½ö×÷ÎaÑYê¾ê1óã¬ÇëÎeÄ£·Â
                printf("½óêÕêy¾Y£o%c ",dat);
        }
         
}
//1|Äü½ééü£oprintfÖض¨Ïò
//·μ»ØÖμ  £oÎT
//2Îêy    £o
int fputc(int ch, FILE *f)
{
  USART_SendData(USART1, (uint8_t) ch);                                                        //·¢Ëíêy¾Y
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);        //μè′y·¢Ëííê±Ï
  return ch;
}


int main(void)
{
        USART_Configuration();                                        //′®DDí¨DÅ3õê¼»ˉ
        USART_ClearFlag(USART1,USART_FLAG_TC);        //Çå3y·¢Ëííê3é±ê־룬Ïû3yμúò»¸ö×Ö½ú¶aê§BUG£¬½¨òé·ÅÔúμúò»′Îêy¾Y·¢ËíÇ°Ãæ
        while(1);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
MWXFL
1楼-- · 2019-07-21 03:25
Psheng 发表于 2018-8-21 11:32
这个只是重定向fputc函数,和例程逻辑没有关系的,不影响的。这样写还要开微库的

但是我实验的结果感人
正点原子
2楼-- · 2019-07-21 08:39
MWXFL 发表于 2018-8-21 09:55
那个例程也是没有反应的,准确说是出来乱码

是我们开发板么?
是的话,下载我们例程,绝对可以才行。
不行就是有问题了,发回来返修
MWXFL
3楼-- · 2019-07-21 12:50
 精彩回答 2  元偷偷看……

一周热门 更多>