历史上的今天
返回首页

历史上的今天

今天是:2025年07月31日(星期四)

正在发生

2019年07月31日 | STM32CubeMX的串口配置,以及驱动代码

2019-07-31 来源:eefocus

1.STM32CubeMX的配置没啥子好说的,使能然后改一下波特率和字长,然后在将中断勾选,把中断等级调到1(一定要比systick的优先级垃圾!!!)

2.驱动代码

在生成的it.c文件中,例如用的是串口3,防止串口的ORE的bug粗现


void USART1_IRQHandler(void)

{

  /* USER CODE BEGIN USART1_IRQn 0 */

  if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE)!=RESET)

     __HAL_UART_CLEAR_OREFLAG(&huart1);

  /* USER CODE END USART1_IRQn 0 */

  HAL_UART_IRQHandler(&huart1);

  /* USER CODE BEGIN USART1_IRQn 1 */

 

  /* USER CODE END USART1_IRQn 1 */

}


在用户文件userUtility.c中,第一个函数也是为了防止串口出ORE的bug,第二个函数用于接收


void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)

{

  if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)!=RESET)

     __HAL_UART_CLEAR_OREFLAG(huart);

}

/*-----------------------------------------------------------*/

 

/*-----------------------------------------------------------*/

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

    if(huart == &huart1)

    {

      vUart1RecData();

    }

else if(huart == &huart4)

{

vUart4RecData();

}

}


串口的驱动文件中

#define UARTX_RX_BUF_MAX_LEN 32

#define UARTX_TX_BUF_MAX_LEN 32


static uc prv_ucUartxRxBuf[UARTX_RX_BUF_MAX_LEN];

static uc prv_ucUartxRxLen;

static uc prv_ucUartxTxBuf[UARTX_TX_BUF_MAX_LEN];

static uc prv_ucUartxTxLen;


void vStartUartxRecIt(void)//初始化函数,开启串口接收中断

{

    HAL_UART_Receive_IT(&huart1, prv_ucUartxRxBuf,1);

}


void vUartxRecData(void)

{

    prv_ucUartxRxLen=1;

    while(HAL_UART_Receive(&huart1, &prv_ucUartxRxBuf[prv_ucUartxRxLen], 1, 2)==HAL_OK)//进入阻塞接收2ms接不到就不算在同一包数据中,就是因为这里内部用了sysytick来延时,所以要注意中断优先级

    {

        prv_ucUartxRxLen++;

        if(prv_ucUartxRxLen>=UARTX_RX_BUF_MAX_LEN)

        {

            break;

        }

    }

    controlData.ucUart1RxFlg=1;    

}


void vHandleUartxRxBuf(void)

{

    if(controlData.ucUart1RxFlg==1)//通过一个Flg来耦合接收和处理函数,处理函数看情况放在userWhile中或者直接放在TIM6的回调函数中,多少ms执行一次,充当实时任务

    {

        //

        //Handle code

        //

    memset((uc *)&prv_ucUartxRxBuf,0,sizeof(prv_ucUartxRxBuf));

    controlData.ucUart1RxFlg=0;

    vStartUartxRecIt();

    }

}


3.串口发送数据的时候


HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

这个函数最好用

__disable_irq();


__enable_irq();

夹起来,一来是为了防止发送的时候,有中断来造成数据传输有“断包”的现象,二来是避免发送数据的时候同时接到数据

产生ORE这种BUG

PS;有的人看到可能会说CLEAR_LG这个宏函数,要求输入的参数和GET_ERROR返回的值,参数类型不一样,但其实看一下底层的宏定义会发现,

就tm是同一个玩意儿


推荐阅读

史海拾趣

EOREX公司的发展小趣事

为了进一步提升公司的综合实力和市场竞争力,EOREX公司积极开展跨界合作。他们与汽车制造商、通信设备商等多个行业的领军企业建立了紧密的合作关系,共同研发和推广具有创新性和前瞻性的电子产品。这些跨界合作不仅为EOREX带来了更多的商业机会和市场份额,还推动了整个电子行业的创新和发展。

Blue Creation公司的发展小趣事

作为一家有社会责任感的企业,Blue Creation公司始终关注环保和可持续发展。公司积极采用环保材料和节能技术,努力降低生产过程中的环境影响。同时,公司还积极参与公益事业,捐资助学、扶贫济困,回馈社会。这些举措不仅提升了Blue Creation的企业形象,也为其赢得了社会各界的广泛赞誉。

以上五个故事分别从不同角度展现了Blue Creation公司在电子行业发展的历程和成就。虽然这些故事是虚构的,但它们所蕴含的企业发展理念和经验对于现实中的企业来说仍具有一定的借鉴意义。

Acopian Power Supplies公司的发展小趣事

在市场竞争日益激烈的背景下,Blue Creation公司意识到单打独斗难以立足。于是,公司积极寻求与其他企业建立合作关系。通过与一家知名芯片制造商的深度合作,Blue Creation成功将其电源管理技术集成到对方的芯片产品中,双方共同开拓市场,实现了互利共赢。这一举措不仅提升了Blue Creation的知名度,也为其带来了稳定的收入来源。

CIPS公司的发展小趣事

在2015年,跨境银行间支付清算有限责任公司(CIPS Co., Ltd.)正式成立,并随之推出了人民币跨境支付系统(CIPS)。这一系统的诞生,标志着中国电子支付行业在跨境支付领域迈出了坚实的一步。CIPS系统的建立,不仅满足了国内外金融机构对高效、安全、便捷的跨境支付服务的需求,更为人民币国际化进程提供了有力支持。

DECON公司的发展小趣事

品质是企业的生命线,DECON公司深知这一点。因此,公司建立了完善的品质管理体系,从原材料采购到生产过程的每一个环节都进行严格的质量监控。公司引进了先进的生产设备和技术,优化了生产流程,提高了生产效率和产品质量。同时,公司还建立了完善的售后服务体系,为客户提供及时、高效的技术支持和解决方案。

Furukawa Electric Co Ltd公司的发展小趣事

在电子行业中,技术更新换代迅速,DECON公司深知技术创新的重要性。因此,公司不断投入研发资金,引进高端技术人才,加强自主创新,推出了多款具有领先技术的连接器产品。这些产品不仅满足了市场需求,还提高了公司的市场竞争力。同时,公司还积极与国内外知名企业合作,共同研发新产品,推动了电子连接器行业的发展。

问答坊 | AI 解惑

FPGA 学习开发板

本帖最后由 Fred_1977 于 2022-12-20 16:09 编辑      说实在的,学FPGA的时候真的是爱好,因为我本身就是做硬件开发设计的; FPGA功能确认很强大,所以就想试着自已做一块开发板出来,如果买的话确实挺贵的,当然这不是主要原因 ...…

查看全部问答>

[ ST NUCLEO-U575ZI-Q 测评] HAL移植U8G2

原来在arduino上使用了u8g2.今天偿试用stm32cubeIde进行移植。 一、用stm32cubeIDE进行配置i2c:   这次用到的为PB8-SCL、PB9-SDA,在管脚上配置好: 保存生成工程文件。  二、下载u8g2源码:https://gitcode.net/mirrors ...…

查看全部问答>

GD32450i-EVAL开发板U盘例程存储从内部sram改为外部flash芯片不成功的问题

项目开发中需要存图片到外部flash中,使用GD32450i-EVAL开发板U盘例程,修改存储空间从内部sram改为外部flash芯片,只改了STORAGE_Init、STORAGE_Read、STORAGE_Write三个函数,还有扇区大小和数量。修改后枚举可以成功,格式化也提示成功,但不可 ...…

查看全部问答>

DLC升压电路分析与计算

  鄙人近期遇到几个问题,感觉超出了本人的能力范围,无奈只能寄希望于请教一下论坛的大神了,哎!怪自己学艺不精呐,在此留下了无能的眼泪 如图,从上电之初开始分析,(设上电前C1C2电压为0,L1电流为0,忽略D1D2的正向压降和内阻) ...…

查看全部问答>

红外体温计标定方法是怎么样的?

红外体温计标定方法是怎么样的?   用体温计去测试黑体炉温度?黑体炉设置不同的温度,体温计测试后再比对黑体炉显示的温度?如果有偏差就修正,找出对应的函数关系? 红外体温计标定的流程  说能123说说  另外 ...…

查看全部问答>

开关电源管理芯片反推

本帖最后由 supertanglang 于 2022-12-20 22:22 编辑 各位大师,本人小白,手里有块电源板(接类似吸尘器的东西,满载功率大概260W左右,2路输出),大概逆了下原理图,但是电源管理芯片上没有丝印信息,所以确定不了型号。各位大师是否能够根据 ...…

查看全部问答>

【Sipeed 博流BL808全能板】BL808最小系统验证

本帖最后由 单笑寒 于 2022-12-21 10:04 编辑 BL808最小系统验证       手册里说,BL808有3个RISC-V核:D0核(480MHz RV64)、M0核(320MHz RV32)、LP核(160MHz RV32),本次基于官方文档验证最小环境(基于Linux ...…

查看全部问答>

[ ST NUCLEO-U575ZI-Q 测评] STM32U5超低功耗高性能Cortex_M33MCU技术解析培训资料

今天找到了在ST中文网上的中文培训资料,很详细的PPT。这里分享给需要的人。 里面主要有: 1-市场部分 V1.3 2-硬件部分-v1.0 3-STM32U5对比STM32L5有哪些更新-v1.0 4-系统和架构-v1.0 5-DMA-v1.0 6-电源管理和低功耗-v1.0 ...…

查看全部问答>

LT268A串口屏解决方案

LT268A串口屏解决方案,有兴趣请留言 …

查看全部问答>

【Sipeed 博流BL808全能板】- 例子使用一 资料&&sdk结构分析整理

本帖最后由 damiaa 于 2022-12-21 09:57 编辑                                    【Sipeed 博流BL808全能板】- 例子使用一 资料&&sdk结构分 ...…

查看全部问答>