OpenEdv-开源电子网

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

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

[复制链接]

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2018-8-10
在线时间
36 小时
发表于 2018-8-20 08:19:53 | 显示全部楼层 |阅读模式
1金钱
原子的
[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\r\n",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);
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-21 02:04:48 | 显示全部楼层
直接下载我们例程测试下
回复

使用道具 举报

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2018-8-10
在线时间
36 小时
 楼主| 发表于 2018-8-21 09:54:07 | 显示全部楼层
正点原子 发表于 2018-8-21 02:04
直接下载我们例程测试下

就是直接用的例程没有反应,然后再加一句函数就可以了,
回复

使用道具 举报

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2018-8-10
在线时间
36 小时
 楼主| 发表于 2018-8-21 09:55:49 | 显示全部楼层
正点原子 发表于 2018-8-21 02:04
直接下载我们例程测试下

那个例程也是没有反应的,准确说是出来乱码
回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17769
金钱
17769
注册时间
2018-3-3
在线时间
523 小时
发表于 2018-8-21 10:09:52 | 显示全部楼层
没看出来加了那句。。。
/*
*
*
*
*
*
*/
回复

使用道具 举报

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2018-8-10
在线时间
36 小时
 楼主| 发表于 2018-8-21 11:19:04 | 显示全部楼层
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;
}

加了这个函数

回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17769
金钱
17769
注册时间
2018-3-3
在线时间
523 小时
发表于 2018-8-21 11:32:28 | 显示全部楼层
MWXFL 发表于 2018-8-21 11:19
int fputc(int ch, FILE *f)
{
  USART_SendData(USART1, (uint8_t) ch);                             ...

这个只是重定向fputc函数,和例程逻辑没有关系的,不影响的。这样写还要开微库的
/*
*
*
*
*
*
*/
回复

使用道具 举报

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2018-8-10
在线时间
36 小时
 楼主| 发表于 2018-8-21 13:56:49 | 显示全部楼层
Psheng 发表于 2018-8-21 11:32
这个只是重定向fputc函数,和例程逻辑没有关系的,不影响的。这样写还要开微库的

但是我实验的结果感人
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-22 01:57:30 | 显示全部楼层
MWXFL 发表于 2018-8-21 09:55
那个例程也是没有反应的,准确说是出来乱码

是我们开发板么?
是的话,下载我们例程,绝对可以才行。
不行就是有问题了,发回来返修
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2018-8-10
在线时间
36 小时
 楼主| 发表于 2018-8-22 07:50:17 | 显示全部楼层
正点原子 发表于 2018-8-22 01:57
是我们开发板么?
是的话,下载我们例程,绝对可以才行。
不行就是有问题了,发回来返修

自己做的板子
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 14:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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