华大单片机HC32F003串口发送一个字节数据后死机问题
本人最近在使用HC32F003单片机做一个项目中遇到串口发送完成后程序出现跑飞死机现象,第一次出现这个问题,之前使用HC32L136时候就没有这个问题。
HC32F003有2个异步串口功能,如图下为串口概述
![](/assets/blank.gif)
以下是串口的内部结构框图
![](/assets/blank.gif)
串口1初始化函数
//串口1初始化函数
static void Usart1_Init(uint32_t Baud)
{stc_gpio_cfg_t stcGpioCfg;stc_uart_cfg_t stcCfg;stc_uart_baud_cfg_t stcBaud;stc_bt_cfg_t stcBtCfg;uint16_t timer=0;DDL_ZERO_STRUCT(stcGpioCfg);Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //使能GPIO模块时钟///<TXstcGpioCfg.enDir = GpioDirOut;Gpio_Init(GpioPort3, GpioPin2, &stcGpioCfg);Gpio_SetAfMode(GpioPort3, GpioPin2, GpioAf5); //配置P32 端口为URART0_TX///<RXstcGpioCfg.enDir = GpioDirIn;Gpio_Init(GpioPort3, GpioPin3, &stcGpioCfg);Gpio_SetAfMode(GpioPort3, GpioPin3, GpioAf5); //配置P33 端口为URART0_RXDDL_ZERO_STRUCT(stcBaud);DDL_ZERO_STRUCT(stcBtCfg);//外设时钟使能Sysctrl_SetPeripheralGate(SysctrlPeripheralBt,TRUE);//模式0/2可以不使能Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);stcBaud.bDbaud = 0u;//双倍波特率功能stcBaud.u32Baud = Baud;//更新波特率位置stcBaud.enMode = UartMode1; //计算波特率需要模式参数stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); //获取PCLKtimer = Uart_SetBaudRate(M0P_UART1, &stcBaud);stcBtCfg.enMD = BtMode2;stcBtCfg.enCT = BtTimer;Bt_Init(TIM1, &stcBtCfg);//调用basetimer1设置函数产生波特率Bt_ARRSet(TIM1,timer);Bt_Cnt16Set(TIM1,timer);Bt_Run(TIM1);stcCfg.enRunMode = UartMode1;//测试项,更改此处来转换4种模式测试Uart_Init(M0P_UART1, &stcCfg);///< UART中断配置Uart_EnableIrq(M0P_UART1, UartRxIrq);Uart_ClrStatus(M0P_UART1, UartRC);EnableNvic(UART0_IRQn, IrqLevel3, TRUE);
}
串口1发送函数
//UART1发送函数
static void Usart1_SendData(uint8_t Dat)
{Uart_SendDataPoll(M0P_UART1,Dat);
}
串口1中断函数
///< UART1 中断服务函数
void UART1_IRQHandler(void)
{volatile uint8_t u8RxData;if(TRUE == Uart_GetStatus(M0P_UART1, UartRC)){Uart_ClrStatus(M0P_UART1, UartRC);u8RxData = Uart_ReceiveData(M0P_UART1);}}
刚开始一直以为是硬件问题后面经过多次的调试,最后才发现是中断服务函数问题,问题是出现在中断interrupt.C文件里面的中断服务函数,能进入中断函数,但是里面的调用的测无法进入,因为本人的中断是写在串口usart1.C文件的,所以会出现无法进入子函数里面,解决方案就是不要在interrupt.c文件中调用,在usart1.C文件的调用,需要将interrupt.c文件中的void UART1_IRQHandler(void)给屏蔽了
![](/assets/blank.gif)
然后在usart1.C文件中调用void UART1_IRQHandler(void)中断服务函数即可解决HC32F003串口发送完成一个字节后出现程序跑飞现象
![](/assets/blank.gif)
次问题就是中断部分程序跑飞引起的死机现象,国产的单片机的库肯定是会有些小问题的,需要我们开发应用者的支持,希望能够帮到你们,最后祝大家新年快乐,兔年吉祥,工作顺利!
华大单片机HC32F003串口发送一个字节数据后死机问题相关推荐
- 51单片机模拟串口发送接收数据(不使用SBUF)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 51单片机.模拟串口.串口发送.串口接收.逻辑分析仪 前言 一.配置定时器 二.串口发送 三.串口接收 四.主函数 五.波形图 5.1 ...
- 单片机原理与应用实验——串口(C语言),使用串口发送或接收数据,定时器1作为波特率发生器
(基于51核的STC12C5A60S2,keil uvision5 mdk 5.25 编译) 1. 定时发送1字节数据给电脑,波特率9600 #include <STC12C5A60S2.h&g ...
- 华大单片机 HC32F460 串口调试
华大单片机 HC32F460 串口调试 吐槽下,华大官方例程写到太复杂了,不熟练的一时摸不上手. #include "drvs.h" /********************** ...
- 串口发送接收浮点型数据
转自:https://blog.csdn.net/liangwei88624/article/details/6885803 转自:https://blog.csdn.net/newstoy/arti ...
- 国产超低功耗华大单片机HC32F003开发板上手入门
今天介绍下国产超低功耗华大单片机HC32F003开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32F003开发板(如下图所示)分为板载调试模块(左半部分 ...
- STM32L152RE实现串口发送及接收数据
本文主要讲解用keil软件实现USART串口发送及接收数据,默认读者keil环境已经配好,且头文件已正确引入,如出现编译错误以及st-link下载问题,请自行百度解决. 串口发送和接收数据是一件看起来 ...
- 华大单片机HC32F003如何新建工程(ddl库版本)
华大单片机HC32F003如何新建工程(ddl库版本) 准备工作 正式工作 准备工作 在硬盘中找个位置建立mdk_test文件夹,此文件夹用来存储项目中调用及生成的所有非内核的文件(内核文件位置与ke ...
- enc28j60发送大量数据时死机
我用的是lwip,enc28j60作为网卡,发送大量数据时死机,无法ping通,一度以为是lwip协议栈的问题. 经过半个月的查询,发现时enc28j60电流的问题. 可以加大电流,enc28j60即 ...
- STC51单片机26——串口发送DS18B20温度值
#include<reg51.h> #define uchar unsigned char #define uint unsigned in ...
最新文章
- matlab编写的程序输入参数怎么写,用matlab编写一个用EM算法估计参数的程序
- [备忘]macOS和Windows下很赞的软件
- 计算机 网络访问保护,开启win2008网络访问保护的具体步骤
- java----OO的概念和设计原则(转)
- 如何用JAVAC一次性编译多个包下的JAVA文件 ;JAVA和JAVAC 命令行;java 带有包名编译并运行,附带外部依赖jar包运行
- repast HPC初探(运行其自带例子过程中出现的问题)
- 软件如何实现屏幕共享?
- JS对象属性操作之定义属性篇
- ubuntu16.04 设置动态ip和静态ip及route命令的使用
- 免费无损高品质音乐下载器V3.5
- python选择结构练习(一)
- DQN-FlappyBird项目学习
- cv2.imread()读出的矩阵shape
- 关于计算机专业的调整与优化,Win10这样做优化让你的电脑更流畅
- wifi 小程序 透传_微信小程序之一键连接wifi
- css网页布局问题,CSS网页布局常见问题小结
- 无人机智能巡检系统及功能介绍
- 颈椎不太好适合学计算机那,低头对颈椎不好,那仰头是不是有好处?保护颈椎要记住5个要点,10个动作!...
- 机器学习深度学习视频资料汇总
- Eclipse快捷键大全(转载)