当前位置:首页 > 单片机 > 单片机
[导读]硬件平台:stm32F407Zet6软件平台:stm32cubeMX 4.7+MDK5.14电路连接:PA9,PA10第一步、通过Stm32CubeMX图形界面创建Keil工程需要配置的地方是在这里可以修改串口工作的一下参数,软件就可以生成配置好的工程,不需要

硬件平台:stm32F407Zet6

软件平台:stm32cubeMX 4.7+MDK5.14

电路连接:PA9,PA10

第一步、通过Stm32CubeMX图形界面创建Keil工程

需要配置的地方是



在这里可以修改串口工作的一下参数,软件就可以生成配置好的工程,不需要亲自去配置这些了。

第二步。打开工程,编写代码,验证

#include"stdio.h"

#ifdef__GNUC__

#definePUTCHAR_PROTOTYPEint__io_putchar(intch)

#else

#definePUTCHAR_PROTOTYPEintfputc(intch,FILE*f)

#endif

PUTCHAR_PROTOTYPE

{

HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);

returnch;

}

这段程序为了可以使用printf()函数,对字符输出函数进行了重定向,这样我们就可以在程序中使用printf函数进行输出了,这里使用的是查询发送方式,有超时控制的。接下来来看中断方式的。

voidHAL_UART_IRQHandler(UART_HandleTypeDef*huart)

{

uint32_ttmp1=0,tmp2=0;

tmp1=__HAL_UART_GET_FLAG(huart,UART_FLAG_PE);

tmp2=__HAL_UART_GET_IT_SOURCE(huart,UART_IT_PE);

if((tmp1!=RESET)&&(tmp2!=RESET))

{

__HAL_UART_CLEAR_PEFLAG(huart);

huart->ErrorCode|=HAL_UART_ERROR_PE;

}

tmp1=__HAL_UART_GET_FLAG(huart,UART_FLAG_FE);

tmp2=__HAL_UART_GET_IT_SOURCE(huart,UART_IT_ERR);

if((tmp1!=RESET)&&(tmp2!=RESET))

{

__HAL_UART_CLEAR_FEFLAG(huart);

huart->ErrorCode|=HAL_UART_ERROR_FE;

}

tmp1=__HAL_UART_GET_FLAG(huart,UART_FLAG_NE);

tmp2=__HAL_UART_GET_IT_SOURCE(huart,UART_IT_ERR);

if((tmp1!=RESET)&&(tmp2!=RESET))

{

__HAL_UART_CLEAR_NEFLAG(huart);

huart->ErrorCode|=HAL_UART_ERROR_NE;

}

tmp1=__HAL_UART_GET_FLAG(huart,UART_FLAG_ORE);

tmp2=__HAL_UART_GET_IT_SOURCE(huart,UART_IT_ERR);

if((tmp1!=RESET)&&(tmp2!=RESET))

{

__HAL_UART_CLEAR_OREFLAG(huart);

huart->ErrorCode|=HAL_UART_ERROR_ORE;

}

tmp1=__HAL_UART_GET_FLAG(huart,UART_FLAG_RXNE);

tmp2=__HAL_UART_GET_IT_SOURCE(huart,UART_IT_RXNE);

if((tmp1!=RESET)&&(tmp2!=RESET))

{

UART_Receive_IT(huart);

}

tmp1=__HAL_UART_GET_FLAG(huart,UART_FLAG_TXE);

tmp2=__HAL_UART_GET_IT_SOURCE(huart,UART_IT_TXE);

if((tmp1!=RESET)&&(tmp2!=RESET))

{

UART_Transmit_IT(huart);

}

tmp1=__HAL_UART_GET_FLAG(huart,UART_FLAG_TC);

tmp2=__HAL_UART_GET_IT_SOURCE(huart,UART_IT_TC);

if((tmp1!=RESET)&&(tmp2!=RESET))

{

UART_EndTransmit_IT(huart);

}

if(huart->ErrorCode!=HAL_UART_ERROR_NONE)

{

huart->State=HAL_UART_STATE_READY;

HAL_UART_ErrorCallback(huart);

}

}

这个函数中查询了所有可能发生的中断。用到的中断是发送完成中断,就找到了UART_EndTransmit_IT(huart);再跳进去看看,

staticHAL_StatusTypeDefUART_EndTransmit_IT(UART_HandleTypeDef*huart)

{

__HAL_UART_DISABLE_IT(huart,UART_IT_TC);

if(huart->State==HAL_UART_STATE_BUSY_TX_RX)

{

huart->State=HAL_UART_STATE_BUSY_RX;

}

else

{

__HAL_UART_DISABLE_IT(huart,UART_IT_PE);

__HAL_UART_DISABLE_IT(huart,UART_IT_ERR);

huart->State=HAL_UART_STATE_READY;

}

HAL_UART_TxCpltCallback(huart);

returnHAL_OK;

}

这个函数在确定中断发生了之后调用了,HAL_UART_TxCpltCallback(huart);从函数名上可以看出,这是个回调函数,就是留给上层来实现的函数,由这个函数的实现不同,来实现不同的功能。这里来实现这个函数,让它在中断发生的时候吧USART1Ready置为SET;代码修改如下

#include"stdio.h"

#ifdef__GNUC__

#definePUTCHAR_PROTOTYPEint__io_putchar(intch)

#else

#definePUTCHAR_PROTOTYPEintfputc(intch,FILE*f)

#endif

__IOITStatusUSART1Ready=RESET;

PUTCHAR_PROTOTYPE

{

HAL_UART_Transmit_IT(&huart1,(uint8_t*)&ch,1);

while(USART1Ready!=SET)

{

}

USART1Ready=RESET;

returnch;

}

这是重定向函数的修改,启动发送之后,等待发送完成。重新实现的回调函数如下图所示:

voidHAL_UART_TxCpltCallback(UART_HandleTypeDef*huart)

{

USART1Ready=SET;

}


这样就可以了,下载验证。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭