OpenEdv-开源电子网

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

HAL+LL库串口无法通讯

[复制链接]

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-23
在线时间
51 小时
发表于 2018-1-7 14:43:04 | 显示全部楼层 |阅读模式
5金钱
直接上代码了
//初始化IO 串口1
//bound:波特率
void CPT_init(u32 bound)
{       
        //UART 初始化设置
        CPT_Handler.Instance = USART1;                                            //USART1
        CPT_Handler.Init.BaudRate = bound;                                    //波特率
        CPT_Handler.Init.WordLength = UART_WORDLENGTH_8B;           //字长为8位数据格式
        CPT_Handler.Init.StopBits = UART_STOPBITS_1;                    //一个停止位
        CPT_Handler.Init.Parity = UART_PARITY_NONE;                    //无奇偶校验位
        CPT_Handler.Init.HwFlowCtl = UART_HWCONTROL_NONE;           //无硬件流控
        CPT_Handler.Init.Mode = UART_MODE_TX_RX;                            //收发模式
        HAL_UART_Init(&CPT_Handler);                                                    //HAL_UART_Init()会使能UART1
       
        LL_USART_EnableIT_RXNE(CPT_Handler.Instance);        //开启接收中断
}

//UART底层初始化,时钟使能,引脚配置,中断配置
//此函数会被HAL_UART_Init()调用
//huart:串口句柄
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO端口设置
        GPIO_InitTypeDef GPIO_Initure;
       
        if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化
        {
                __HAL_RCC_GPIOA_CLK_ENABLE();                        //使能GPIOA时钟
                __HAL_RCC_USART1_CLK_ENABLE();                        //使能USART1时钟
       
                GPIO_Initure.Pin=GPIO_PIN_9;                        //PA9
                GPIO_Initure.Mode=GPIO_MODE_AF_PP;                //复用推挽输出
                GPIO_Initure.Pull=GPIO_PULLUP;                        //上拉
                GPIO_Initure.Speed=GPIO_SPEED_FAST;                //高速
                GPIO_Initure.Alternate=GPIO_AF7_USART1;        //复用为USART1
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);                   //初始化PA9

                GPIO_Initure.Pin=GPIO_PIN_10;                        //PA10
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);                   //初始化PA10
               
                HAL_NVIC_EnableIRQ(USART1_IRQn);                //使能USART1中断通道
                HAL_NVIC_SetPriority(USART1_IRQn,3,3);        //抢占优先级3,子优先级3
        }
}


unsigned char Rx = 0;
void USART1_IRQHandler(void)                       
{
        if(LL_USART_IsActiveFlag_RXNE(CPT_Handler.Instance))
        {
                Rx = LL_USART_ReceiveData8(CPT_Handler.Instance);//这里接收到的数据不正确,不知道是什么原因
        }
}

最佳答案

查看完整内容[请看2#楼]

我不会标准库,一般先用HAL实现,再改一个LL版本。LL库代码量小,运行快多了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

354

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2017-5-21
在线时间
340 小时
发表于 2018-1-7 14:43:05 来自手机 | 显示全部楼层
卿枫凌 发表于 2018-1-8 21:56
多谢,感觉LL库的操作确实效率要高

我不会标准库,一般先用HAL实现,再改一个LL版本。LL库代码量小,运行快多了。
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-23
在线时间
51 小时
 楼主| 发表于 2018-1-7 15:36:41 | 显示全部楼层
难道没有人使用HAL+LL吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-8 01:14:52 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2016-11-1
在线时间
119 小时
发表于 2018-1-8 08:24:12 | 显示全部楼层
本帖最后由 Noctis 于 2018-1-8 09:03 编辑

你的Rx变量最好设为volatile。
最好再检测一下错误标记,有错误标志也清除一下。
回复

使用道具 举报

17

主题

354

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2017-5-21
在线时间
340 小时
发表于 2018-1-8 09:25:12 来自手机 | 显示全部楼层
用LL库,在irq里面要清楚标志位
回复

使用道具 举报

13

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
金钱
469
注册时间
2015-5-14
在线时间
65 小时
发表于 2018-1-8 09:33:20 | 显示全部楼层
用库或者寄存器,HAL还没用。
回复

使用道具 举报

17

主题

354

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2017-5-21
在线时间
340 小时
发表于 2018-1-8 10:12:07 来自手机 | 显示全部楼层
LL没有教程,cube生成的文件也有些错误,自己慢慢摸索。HAL库基本没有大的bug了,可以使用。
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-23
在线时间
51 小时
 楼主| 发表于 2018-1-8 21:56:34 | 显示全部楼层
l6931639 发表于 2018-1-8 10:12
LL没有教程,cube生成的文件也有些错误,自己慢慢摸索。HAL库基本没有大的bug了,可以使用。

多谢,感觉LL库的操作确实效率要高
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-23
在线时间
51 小时
 楼主| 发表于 2018-1-8 21:57:06 | 显示全部楼层
Noctis 发表于 2018-1-8 08:24
你的Rx变量最好设为volatile。
最好再检测一下错误标记,有错误标志也清除一下。

嗯嗯,多谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 13:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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