历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2019年03月25日 | 【STM32CubeMX】HAL库中断方式UART串口通信

2019-03-25 来源:eefocus

HAL库下,利用STM32CubeMX生成源代码,确实比较简单,比用标准库简单很多。


现在总结自己学习的过程:


硬件平台:正点原子探索者(STM32F407ZET6)


1、配置STM32CubeMX


(1)打开STM32CubeMX,选择相应的芯片型号,并配置调试信息为:Serial Wire




(2)配置RCC主频,选择外部高速晶振(HSE):Crystal/Ceramic Resonator(译文:水晶/陶瓷谐振器)



然后开始配置时钟树:


外部晶振为8MHz,配置PLL使主频为168MHz,如下图:



(3)配置USART1:选择异步通信模式



(4)配置串口:115200,1,8,0,不用像标准库那样去自己写,直接在软件中进行配置即可,非常方便。



(5)使能USART1中断



2、源代码


(1)导出源代码,并在main.c中添加如下定义,用来接收串口数据:


uint8_t aRxBuffer; //接收中断缓冲

uint8_t Uart1_RxBuff[256]; //接收缓冲

uint8_t Uart1_Rx_Cnt = 0; //接收缓冲计数

uint8_t cAlmStr[] = "数据溢出(大于256)\r\n";

(2)在int main(void)主函数中,添加开启接收中断的语句:

/* USER CODE BEGIN 2 */

HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);

/* USER CODE END 2 */

(3)在main.c下部添加中断回调函数:


/* USER CODE BEGIN 4 */

/**

  * @brief  Rx Transfer completed callbacks.

  * @param  huart pointer to a UART_HandleTypeDef structure that contains

  *                the configuration information for the specified UART module.

  * @retval None

  */

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

  /* Prevent unused argument(s) compilation warning */

  UNUSED(huart);

  /* NOTE: This function Should not be modified, when the callback is needed,

           the HAL_UART_TxCpltCallback could be implemented in the user file

   */

 

if(Uart1_Rx_Cnt >= 255)  //溢出判断

{

Uart1_Rx_Cnt = 0;

memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));

HAL_UART_Transmit(&huart1, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);

}

else

{

Uart1_RxBuff[Uart1_Rx_Cnt++] = aRxBuffer;   //接收数据转存


if((Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0x0A)&&(Uart1_RxBuff[Uart1_Rx_Cnt-2] == 0x0D)) //判断结束位

{

HAL_UART_Transmit(&huart1, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发送出去

Uart1_Rx_Cnt = 0;

memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //清空数组

}

}


HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断

}

/* USER CODE END 4 */

(4)编译下载调试(正常数据):

(5)溢出数据:

总结:


 用STM32CubeMX,确实比较简单快捷,本次串口配置相关的,不到5分钟即可完成,不用复制代码,直接在CubeMX中


完成,虽然现在标准库还有很大的市场,但是用了CubeMX感觉更简单快捷,而且更易于移植,未来的趋势,希望以后继


续学习CubeMX,并熟练运用。

推荐阅读

史海拾趣

台湾固锝(GD)公司的发展小趣事
接入输入信号后,观察输出信号的变化情况,调整增益控制参数以观察其对输出信号的影响。
Emerging Display Technolgies公司的发展小趣事

某新兴显示技术公司,专注于柔性显示技术的研发。随着市场对可折叠、可卷曲电子设备需求的增加,该公司投入巨资研发新一代柔性屏幕。经过数年的努力,他们成功开发出了具有超高柔韧性、清晰度和耐用性的显示屏。这一技术的突破,不仅为智能手机、平板电脑等移动设备带来了全新的形态设计,也为可穿戴设备、车载显示等领域提供了更多可能性。

Catalyst公司的发展小趣事

Catalyst公司深知品质是企业生存和发展的根本。因此,公司始终将品质管理放在首位,从原材料采购到生产加工、产品检验等各个环节都进行严格把控。公司还建立了完善的售后服务体系,确保客户在使用过程中能够得到及时、专业的技术支持。这些举措不仅提升了Catalyst产品的品质水平,也赢得了客户的信任和好评。

Custom Mmic Design Services Inc公司的发展小趣事

近年来,随着电子行业的快速发展和市场竞争的加剧,CMDS也面临着诸多挑战。例如,原材料价格波动、人工成本上升、环保要求提高等都给公司的生产和经营带来了压力。然而,CMDS凭借其强大的技术实力和市场竞争力,积极应对这些挑战。通过优化生产流程、提高生产效率、加强成本管理等措施,CMDS不仅成功克服了这些困难,还实现了稳健的发展。同时,公司还注重环境保护和社会责任,积极推动可持续发展战略的实施。

Gamewell-FCI ( Honeywell )公司的发展小趣事

CMDS深知技术创新是企业持续发展的关键。因此,公司不断加大研发投入,积极引进优秀人才和先进技术设备。通过持续的研发投入和人才培养,CMDS不断推出具有创新性和竞争力的新产品和解决方案。这些新产品不仅满足了客户不断变化的需求,也推动了整个行业的发展和进步。

Active-Semi公司的发展小趣事

为了进一步拓展国际市场,CMDS积极寻求与国外企业的合作。通过与国际知名电子企业建立战略合作关系,CMDS不仅获得了先进的技术支持和市场资源,还成功将其产品打入国际市场。同时,公司还积极参加国际展会和交流活动,与全球同行建立了广泛的联系和合作网络。这些国际合作不仅为CMDS带来了更多的商业机会,也提升了其在国际市场上的知名度和影响力。

问答坊 | AI 解惑

modelsim6.2 波形

我用的Modelsim se plus 6.2b仿真verilog程序,编译什么的都很正常,但就是每次到显示波形时,很奇怪,有波形出来,但个个信号始终只有一种状态,波形图成直线。我确定程序是没有问题的,换过好多程序都是如此!请诸位为帮忙看看是什么问题!…

查看全部问答>

嵌入式ARM9下双口RAM的实现问题

    在嵌入式ARM9平台,LINUX系统,双口RAM驱动中能实现它的配置初始化吗?就是双口RAM需要的总线周期、数据位数、占用ARM的哪个bank等配置信息?还是应该在bootload中就应该初始化了啊?希望各位达人指教!!!!…

查看全部问答>

初学platformbuilder,配置后 builder 错误 ,希望高手指点,谢谢

--------------------Configuration: WINDOWSCE - EMULATOR: X86 Win32 (WCE emulator) Release-------------------- Generating platform header files... CEBUILD: Deleting old build logs CEBUILD: Skipping directly to SYSGEN phase CEBU ...…

查看全部问答>

mdb/ip 的找零问题

  请问 用 mdb/ip 协议 ,让 kcm-d找零的话,发送什么指令???…

查看全部问答>

ADX调试时,跳到一大堆dci指令.ADS的设置按照芯片手册,应该不会错.大家帮帮忙.

ADX调试时,跳到一大堆dci指令. ADS的设置按照芯片手册,应该不会错. 大家帮帮忙.…

查看全部问答>

EVC与VC的差別

我在VC下用Win32 Application建了一个工程,然后在资源中添加了一个Version,在編辑后的exe文件的属性页中是有版本这一页的。 而我在EVC下用WCE Application建一工程,也在资源中添加了一个Version,但是在生成的exe文件的属性页中却沒有版本这一面 ...…

查看全部问答>

关于S3C44B0X数据端口的使用问题

#define TP_DCLK(a)      outw((inw(S3C44B0X_PDATF) &(~(1…

查看全部问答>

招驱动开发方面的兼职人员

本公司现在招驱动开发方面书籍的作者 待遇丰厚 有兴趣的可以和我联系  进行详谈 QQ878298915 请注明  驱动 Email pyq_1985@163.com…

查看全部问答>

pci转ide硬盘存储

我刚刚接触linux嵌入式开发,老大叫我做pci转ide硬盘存储这块,网上都搜不到,不知道有没有高人指点?给各建议也行,谢了!…

查看全部问答>

《全数字TI方案电源》显示面板电路图

附件中有两个图,分别采用静态和扫描方式显示, 对于静态显示,使用9片74HC595,这种方式对它的要求不高,且CPU处理的时间又短。 可以采用价格低一些的器件。在淘宝上看,零售价在0.2 ~ 0.7间。   对于动态显示方式,占用CPU的时间较长, ...…

查看全部问答>