OpenEdv-开源电子网

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

[探索者F407] 探索者F407串口4通信实验(HAL版本)测试程序

[复制链接]

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2018-11-15 17:46:18 | 显示全部楼层 |阅读模式
论坛网友反应探索者用HAL库使用PC10和PC11不能串口通信,所以写了这个帖子
http://www.openedv.com/forum.php?mod=viewthread&tid=282908&extra=
程序基于HAL库版本的串口例程修改,使用时需要PC10/PC11分别接USB转TTL电路的RXD/TXD(下图中的2处)
探索者_1.png
PC10和PC11可以复用为UART4,根据STM32F407芯片手册,复用的时候需要选择复用器的AF8
复用器8.JPG
整个工程重要的是usart_init()函数,和AL_UART_MspInit()。前者设置串口的波特率奇偶校验位等,后者使能UART4对应的时钟、引脚和中断优先级
[mw_shl_code=c,true]//初始化IO 串口4
//bound:波特率
void uart_init(u32 bound)
{        
        //UART 初始化设置
        UART4_Handler.Instance=UART4;                                            //UART4
        UART4_Handler.Init.BaudRate=bound;                                    //波特率
        UART4_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
        UART4_Handler.Init.StopBits=UART_STOPBITS_1;            //一个停止位
        UART4_Handler.Init.Parity=UART_PARITY_NONE;                    //无奇偶校验位
        UART4_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
        UART4_Handler.Init.Mode=UART_MODE_TX_RX;                    //收发模式
        HAL_UART_Init(&UART4_Handler);                                            //HAL_UART_Init()会使能UART4
        
        HAL_UART_Receive_IT(&UART4_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量
  
}[/mw_shl_code]

[mw_shl_code=c,true]//UART底层初始化,时钟使能,引脚配置,中断配置
//此函数会被HAL_UART_Init()调用
//huart:串口句柄

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO端口设置
        GPIO_InitTypeDef GPIO_Initure;
        
        if(huart->Instance==UART4)//如果是串口4,进行串口4 MSP初始化
        {
                __HAL_RCC_GPIOC_CLK_ENABLE();                        //使能GPIOc时钟
                __HAL_RCC_UART4_CLK_ENABLE();                        //使能UART4时钟
        
                GPIO_Initure.Pin=GPIO_PIN_10;                        //PC10
                GPIO_Initure.Mode=GPIO_MODE_AF_PP;                //复用推挽输出
                GPIO_Initure.Pull=GPIO_PULLUP;                        //上拉
                GPIO_Initure.Speed=GPIO_SPEED_FAST;                //高速
                GPIO_Initure.Alternate=GPIO_AF8_UART4;        //复用为UART4
                HAL_GPIO_Init(GPIOC,&GPIO_Initure);                   //初始化PC10
                GPIO_Initure.Pin=GPIO_PIN_11;                        //PC11
                HAL_GPIO_Init(GPIOC,&GPIO_Initure);                   //初始化PC11
               
#if EN_UART4_RX
                HAL_NVIC_EnableIRQ(UART4_IRQn);                                //使能USART4中断通道
                HAL_NVIC_SetPriority(UART4_IRQn,3,3);                        //抢占优先级3,子优先级3
#endif        
        }

}[/mw_shl_code]
截图1.JPG



探索者F407串口4通信实验(HAL版本).rar

10.89 MB, 下载次数: 278

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

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-15 18:01:19 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

104

帖子

0

精华

高级会员

Rank: 4

积分
961
金钱
961
注册时间
2012-5-8
在线时间
343 小时
发表于 2018-11-24 13:40:41 | 显示全部楼层
楼主,我把你的程序下载到开发板,但是串口没有任何数据输出。不知道问什么
回复 支持 反对

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
 楼主| 发表于 2018-11-24 14:37:29 | 显示全部楼层
mmlyy2012 发表于 2018-11-24 13:40
楼主,我把你的程序下载到开发板,但是串口没有任何数据输出。不知道问什么

PC10/PC11分别接USB转TTL电路的RXD/TXD了不?
我这是没啥问题
回复 支持 反对

使用道具 举报

3

主题

104

帖子

0

精华

高级会员

Rank: 4

积分
961
金钱
961
注册时间
2012-5-8
在线时间
343 小时
发表于 2018-11-26 09:37:38 | 显示全部楼层
好的,我在看看 谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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