你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32F407 USART2/3无法送数据的问题说明

[复制链接]
zsyzww 发布时间:2016-11-14 14:52
原码镇楼:void HalUart2_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); //使能GPIOD时钟        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟


        //串口2对应得引脚复用映射
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_USART2); //GPIOD5复用为USART2
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,GPIO_AF_USART2); //GPIOD6复用为USART2
        
        //USART2端口配置
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;         //GPIOD5与GPIOD6
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                        //复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //速度50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                         //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                         //上拉
        GPIO_Init(GPIOD,&GPIO_InitStructure);                                         //初始化PD5,PD6

   //USART2 端口配置
        USART_InitStructure.USART_BaudRate = 9600;                                                                                        //波特率
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;                                //字长为8位数据格式
        USART_InitStructure.USART_StopBits = USART_StopBits_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(USART2, &USART_InitStructure);                                                                                                 //初始化串口1
        
        USART_Cmd(USART2, ENABLE);  //使能串口2
        
        //USART_ClearFlag(USART2, USART_FLAG_TC);
        
#ifdef EN_USART2_RX        
        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);                                //开启相关中断
        //Usart2 NVIC配置
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;                                //串口2中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;        //抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        
#endif

}  


void HalUart2_SendByte(uint8 byte)  
{        
        USART_ClearFlag(USART2,USART_FLAG_TC);
        USART_SendData(USART2,byte);
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC) != SET);               
}


说明:其中很多人USART2/3无法发送数据,
1、APB1的时钟大于42MHZ
2、将RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); 写成RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
3、没有端口映射
4、没有使能串口


评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

收藏 评论1 发布时间:2016-11-14 14:52

举报

1个回答
zero99 回答时间:2016-11-15 08:30:54
学习一下
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版