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条回答
正点原子
1楼-- · 2019-07-20 11:59
 精彩回答 2  元偷偷看……
MWXFL
2楼-- · 2019-07-20 14:39
正点原子 发表于 2018-8-21 02:04
直接下载我们例程测试下

就是直接用的例程没有反应,然后再加一句函数就可以了,
MWXFL
3楼-- · 2019-07-20 19:16
 精彩回答 2  元偷偷看……
Psheng
4楼-- · 2019-07-20 21:46
没看出来加了那句。。。
MWXFL
5楼-- · 2019-07-20 23:09
Psheng 发表于 2018-8-21 10:09
没看出来加了那句。。。

int fputc(int ch, FILE *f)
{
  USART_SendData(USART1, (uint8_t) ch);                                                      
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);        
  return ch;
}

加了这个函数

Psheng
6楼-- · 2019-07-21 03:09
 精彩回答 2  元偷偷看……

一周热门 更多>