精华内容
下载资源
问答
  • 华大单片机串口BUG

    千次阅读 2020-06-11 17:31:56
    华大单片机串口BUG 波特率较快时,发送使用查询,接收使用中断方式,波特率为115200,会死机,停在Uart_SendData函数,原因为,虽然发送是不开中断,但是接收会进入中断函数,此时刚好发送产生中断标志,一起把发送...

    华大单片机串口BUG
    波特率较快时,发送使用查询,接收使用中断方式,波特率为115200,会死机,停在Uart_SendData函数,原因为,虽然发送是不开中断,但是接收会进入中断函数,此时刚好发送产生中断标志,一起把发送的中断完成标志清楚了,导致一直处于发送函数条不出来,解决方法如图二,在中断里面不清除发送标志位。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 华大单片机-串口通讯多字节

    千次阅读 2020-08-12 21:21:40
    目录华大单片机---串口通信1.串口通信基本原理(1)串口通信原理:(2)华大的串口通信:(3)简单介绍下:(4)多字符发送:2.初始化代码3.发送代码:4.接收中断代码 华大单片机串口通信 1.串口通信基本原理 (1...

    华大单片机—串口通信

    1.串口通信基本原理

    (1)串口通信原理:

    这部分可以百度,或者去看下野火的stm32教程,串口通信原理基本一样。这里不再详细讲解!

    (2)华大的串口通信:

    这部分可以直接看用户手册的UART章节。我保证肯定讲的比我详细。里面也有各种寄存器,学会看数据手册是非常重要的,我也是工作后才明白的。之前学习stm32都是看别人的例程跑通就移植了。怎么实现压根不管。第一次用这种资料比较少的单片机,你能依靠的只有几百页的手册了。一遍不懂看多几遍。。。

    (3)简单介绍下:

    发送数据
    发送数据时,与 UARTx_SCON.REN 的值无关,将所发送数据写入 UARTx_SBUF 寄存器中,数据就会从 TXD 移出(低位在先,高位在后)。

    接收数据
    接收数据时,需将 UARTx_SCON.REN 位置 1,并将 UARTx_ISR.RI 位清 0。开始接收 RXD 上数据(低位在先,高位在后),当接收完毕,可以从 UARTx_SBUF 寄存器读出。

    接收缓存
    通用 UART(UART0/1)接收端有一个帧长度(8/9bits)的接收缓存,也就是说当一帧数据接收完毕后,接收缓存中的数据会被一直保持,直到下一帧数据的 Stop 位接收完毕后,接收缓存才会更新为新一帧数据。

    发送缓存
    通用 UART(UART0/1)发送端不支持发送缓存。如果在发送数据过程中,填写UARTx_SBUF 寄存器,将会破坏当前正在发送数据。软件应该避免这种操作。

    (4)多字符发送:

    基本串口通信用demo都可以跑通的,但是demo都是基于一个字节的,在实际使用中,通常都是发送多个字节或者字符串的。因此我参考了野火的多字节发送和字符串发送的代码。自己写了多字节发送代码。

    用中断方式,自己写发送函数,开启发送中断,只需发送第一个字节,发送完成后会进入串口中断,中断中判断是否是发送中断,如果是,判断是否已经发送最后一个字节,如果是,关闭发送中断;如果没有发送到最后一个字节,则发送下一个字节。2.查询方式,从第一个字节循环发送,查询等待发送完成标志,判断是否是最后一个字节,不是,循环发送一个字节,是最后一个字节,退出循环。要发送的内容可以放在一个数组之中 -

    2.初始化代码

    //串口0引脚配置代码
    void Uart_PortInit(void)
    {
        stc_gpio_cfg_t stcGpioCfg;
    
        DDL_ZERO_STRUCT(stcGpioCfg);
    
        Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //使能GPIO模块时钟
    
        ///<URART0_TX
        stcGpioCfg.enDir = GpioDirOut;
        Gpio_Init(URART0_port, URART0_TX, &stcGpioCfg);
        Gpio_SetAfMode(URART0_port, URART0_TX, GpioAf1);         //配置PA08 端口为URART0_TX
    
        ///<RX
        stcGpioCfg.enDir = GpioDirIn;
        Gpio_Init(URART0_port, URART0_RX, &stcGpioCfg);
        Gpio_SetAfMode(URART1_port, URART0_RX, GpioAf1);          //配置PA10 端口为URART0_RX
    	
    	
    }
    //串口配置初始化
    void App_Uart0Cfg(void)
    {
        stc_uart_cfg_t    stcCfg;
    
        DDL_ZERO_STRUCT(stcCfg);
    
        ///< 开启外设时钟
        Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE);///<使能uart0模块时钟
    
        ///<UART Init
        stcCfg.enRunMode        = UartMskMode1;          ///<模式1
        stcCfg.enStopBit        = UartMsk1bit;           ///<1bit停止位
        //stcCfg.enMmdorCk        = UartMskEven;           ///<偶检验
        stcCfg.stcBaud.u32Baud  = 9600;                  ///<波特率9600
        stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;       ///<通道采样分频配置
        stcCfg.stcBaud.u32Pclk  = Sysctrl_GetPClkFreq(); ///<获得外设时钟(PCLK)频率值
        Uart_Init(M0P_UART0, &stcCfg);                   ///<串口初始化
    
        ///<UART中断使能
        Uart_ClrStatus(M0P_UART0,UartRC);                ///<清接收请求
        Uart_ClrStatus(M0P_UART0,UartTC);                ///<清接收请求
        Uart_EnableIrq(M0P_UART0,UartRxIrq);             ///<使能串口接收中断
        Uart_EnableIrq(M0P_UART0,UartTxIrq);             ///<使能串口接收中断
        EnableNvic(UART0_IRQn, IrqLevel3, TRUE);       ///<系统中断使能	
    }
    

    3.发送代码:

    串口发送是非常重要的,在日常的调试代码中,或者单片机与其他物联网设备通讯一般都可以通过串口。

    //发送一个字节
    void Uart_SendByte(M0P_UART_TypeDef* UARTx,uint8_t ch)
    {
    	Uart_SendDataIt(UARTx,ch);//库函数的发送一个字节
    	while( Uart_GetStatus(UARTx, UartTxe)== FALSE);
        //获取TXE的状态,一直等于FLASE=0,表示TX buffer非空
    }
    
    
    //发送字符串
    void Uart_SendString(M0P_UART_TypeDef* UARTx,char *str)
    {
    	 uint8_t k=0;
    	do
    	{
    		
    //		if(Uart_GetStatus(M0P_UART0,UartTC))
    //		{
    //			Uart_ClrStatus(M0P_UART0, UartTC);
    //		}
    		Uart_SendByte(UARTx,*(str+k));//循环发送一个字节一个字节的发
    		k++;
    	
    	}while(*(str+k)!='\0');//直至遇到字符串结束符 '\0'
    	
    }
    

    在这里插入图片描述

    是不是很简单,如果看过野火的UART部分,就回发现思路是一样的,哈哈!我的就是参考着写的。。根据上面(4)的原理写的。采用的是查询方式,,比较好理解。一开始按stm32的思路去写老是错误,后来静下心来想了下。

    4.接收中断代码

    串口不仅发送非常重要,串口接收也是非常重要的,在项目中有时候需要从串口传入参数,或者在网络通讯中,服务器通过联网设备在通过串口直接发送指令给单片机操作对应的外设。串口接收一般采用的是中断的方式。直接看代码!

    //UART0中断函数代码
    void Uart0_IRQHandler(void)
    {
    		//先存储在数组中。
    	if(Uart_GetStatus(M0P_UART0, UartRC))         // RC 接收完成为真,UART0数据接收,有数据来了
        {
    			Uart_ClrStatus(M0P_UART0, UartRC);        //清掉接收中断标志位 置0,为下次继续接收做准备
            RxBuffer[u8RxCnt] = Uart_ReceiveData(M0P_UART0);   	//接收数据字节,把缓存寄存器的值存储在数组中
    				//Uart_SendDataIt(M0P_UART0,temp[u8RxCnt]); 				//接收回显
    				u8RxCnt++;			//依次存储
        }
    		//u8RxCnt=0;//置0,方便下次重复以上操作
    		if(Uart_GetStatus(M0P_UART0,UartTC))  // TC 发送完成为真,发送完成一个字节
    		{
    			Uart_ClrStatus(M0P_UART0,UartTC); //清掉发送中断标志位。置0
    			
    		}
    
    }
    

    5.总结:

    基本到此,华大单片机的串口通讯是没用问题了,能实现基本的串口收发以及多字节收发。至于映射-printf打印,有兴趣可以搞下。

    展开全文
  • 本源码为原创,可以实现华大单片机TTL和红外相互转换,可以支持带载波红外和不带载波的红外,带电路图和源码
  • 华大单片机HC32F005串口烧录程序

    千次阅读 2021-01-27 16:00:12
    2.串口模块 3.串口烧录软件 4.编译好的hex文件 5.杜绑线,跳线帽等 二接线 HC32F005C6PA->GND <--------> 串口模块->GND HC32F005C6PA->VDD <--------> 串口模块->3.3V HC32F005C6...

    一、准备工作

    1.开发板

    2.串口模块

    3.串口烧录软件

    4.编译好的hex文件

    5.杜绑线,跳线帽等

     

    二接线

    HC32F005C6PA->GND <-------->  串口模块->GND

    HC32F005C6PA->VDD <-------->  串口模块->3.3V

    HC32F005C6PA->P35 <-------->  串口模块->RXD

    HC32F005C6PA->P36 <-------->  串口模块->TXD

    HC32F005C6PA->RST<-------->  串口模块->DTR

     

    三串口烧录操作

    1.打开hdsc.exe(Cortex-M在线编程器)

    2.目录MCU选择(对应型号)

    3.通信波特率115200(太高有可能通迅不上)

    4.Hex文件选择相应的文件即可

    5.端口设置相应端口,因电脑而异

    6.点击执行

    7.等待烧录完成!

     

     

     

    推荐:宝贝

    https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-23044783907.21.59684554P8eUTQ&id=638572354522

     

    展开全文
  • 华大单片机移植RTThread操作系统

    千次阅读 多人点赞 2020-09-27 16:26:02
    华大单片机移植RTThread-国产操作系统 文章目录华大单片机移植RTThread-国产操作系统1.华大单片机型号选择2.RTThread源码下载2.1 .资料说明2.3.源码下载3.移植过程3.1.新建华大单片机最小系统工程模板,这里不展开...

    华大单片机移植RTThread-国产操作系统

    1.华大单片机型号选择

    1.由于工作目前有华大的HC32L13x系列的芯片和开发板,因此本文章的移植过程全部基于该型号的移植。我相信其他型号华大单片机也是类似。毕竟我就是通过stm32的例子移植成功的。

    2.RTThread源码下载

    2.1 .资料说明

    官网:https://www.rt-thread.org/document/site/ 这里有你需要的源码资料以及文档说明,非常重要建议反复阅读。

    野火的开发文档:我强烈推荐除了官网的文档说明外,这本由野火出的《RT-Thread 内核实现与应用开发实战—基于STM32》文章,具体内容可以直接到野火的论坛下载。都是免费开源的。野火的资料是我们嵌入式开发者和入门者领路人,当然正点原子也是!!!!

    2.3.源码下载

    1.华大的工程的源码就不提供了,大家手上应该还是有的。

    2.RTThread的已经集成在了Keil MDK,尽量安装新版本的MDK。

    3.移植过程

    3.1.新建华大单片机最小系统工程模板,这里不展开

    3.2.在Keil MDK加入Rtthread代码

    参考链接:https://www.rt-thread.org/document/site/tutorial/nano/nano-port-keil/an0039-nano-port-keil/#rt-thread-nano 官方的操作,我可能写的没官方好吧。。。
    在这里插入图片描述

    3.3添加rtthread源码到工程中

    在这里插入图片描述

    3.4 添加完成的样子

    在这里插入图片描述

    3.5 移植后需要修改部分东西才能让系统真正跑起来。。

    RT-Thread 会接管异常处理函数 HardFault_Handler() 和悬挂处理函数 PendSV_Handler(),这两个函数已由 RT-Thread 实现,所以需要删除工程里中断服务例程文件中的这两个函数,避免在编译时产生重复定义!
    在这里插入图片描述
    在这里插入图片描述

    其实,说白了,有几个文件是非常重要的,改来改去都是这几个文件,rtconfig.h这是配置文件,因此需要开启什么功能,都是在这里开启宏定义的。第二个文件,board.c主要放里面存放的是与硬件相关的初始化函数,比如我们的外设初始化不再放在main函数,而是放在 rt_hw_board_init() 中,具体看下面

    首先,在我们工程建立跟board.c对应的board.h文件,方便我们将头文件放到该文件中。。下面是我的头文件,参考下即可

    在这里插入图片描述

    然后将该board.c 函数 rt_hw_board_init() 修改成下面这样

    void rt_hw_board_init()
    {
        /* System Clock Update */
        //将原来的改成这两个,还有记得引入头文件
    	SystemInit(); //这个是system.hc3213x.c文件自带的
        SystemCoreClockUpdate();//这个是system.hc3213x.c文件自带的。
        
        /* System Tick Configuration */
        _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
    	
        	//这里开始放我们的外设初始化函数
    		App_Timer0PortCfg();
    		User_KeyInit();
    		Uart_PortInit();
    		App_Uart0Cfg();
    		/* 硬件 BSP 初始化统统放在这里,比如 LED,串口,LCD 等 */
    	
    	
        /* Call components board initial (use INIT_BOARD_EXPORT()) */
    #ifdef RT_USING_COMPONENTS_INIT
        rt_components_board_init();
    #endif
    
    #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
        rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
    #endif
    }
    

    至此,只要在main引入

    #include “board.h”

    #include “rtthread.h”

    创建几个任务线程就可以跑系统了啊。。。。。

    基本就可以在华大单片机运行我们的国产RTThread操作系统了。。。
    在这里插入图片描述
    在这里插入图片描述

    补张图:这是rtconfig.h的部分代码,大概就是开启对应的宏定义然后就可以实现对应的功能吧,目前我测试到事件而已啊。。。。然后邮箱,消息队列被工作任务耽搁了!!

    4.测试例子

    main.c 函数
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    5.最后一说:

    这是我自己仿照stm32的移植模式,移植的,中间由于stm32和华大不同也踩了不少坑。也是我第一次接触操作系统和移植。所以难免写的有点水。。。有问题可以评论提出,一起努力解决!!!加油!最后预告下,过不久应该也会出华大移植腾讯的操作系统Tencent OS 。。这个比较简单了。因为华大和腾讯有合作所以就直接有demo历程。。反正支持国产就完事了。。。

    展开全文
  • 华大单片机HC32L176串口调试问题

    千次阅读 2020-12-13 17:47:34
    近期做个项目用到了华大单片机HC32L176PATA,在做串口通讯的时候遇到收发数据错误的问题,用了2天的时间查遍了所有问题,最后尝试设置端口后问题得到解决,问题也反应给了华大的FAE,希望在后续的代码中得到更改。...
  • 华大单片机HC32L110、HC32F003和HC32F005系列MCU有相同的UART通讯模块,因此这三个系列UART模块的使用程序也相同,本文将介绍通过中断的方式进行UART的通讯。 数据格式 此UART模块共有模式0~模式3四种通讯模式,...
  • 华大单片机GPIO配置

    万次阅读 2020-06-05 23:57:14
    华大单片机IO口配置端口结构介绍端口相关配置介绍端口配置操作流程端口复用配置为模拟端口操作流程端口复用配置为数字通用端口操作流程端口上拉使能配置操作流程端口下拉使能配置操作流程端口增强驱动配置操作流程...
  • 华大单片机HC32L130X

    2020-08-09 16:26:38
    文章目录华大单片机HCL13X系列1.资料获取:2.学习思路:3.客观意见:4.预告5.推荐博客 华大单片机HCL13X系列 1.资料获取: (1)FTP服务器 (2)百度网盘 (3)交流群:164973950 2.学习思路: 看数据手册及用户手册...
  • 华大单片机HC32L136如何做printf串口打印格式化输出

    万次阅读 热门讨论 2020-06-18 00:16:37
    目录写在前面半主机模式介绍串口接收初始化串口发送重定向主程序连好开发板在这里插入图片描述运行效果 写在前面 通常工程师在做产品开发和程序调试的时候会通过仿真器进入仿真模式来获得芯片运行的结果,从而判断...
  • 2.串口模块 3.串口烧录软件 4.编译好的hex文件 5.杜绑线,跳线帽等 二接线 HC32L130F8UA->GND <--------> 串口模块->GND HC32L130F8UA->PA9 <--------> 串口模块->RXD HC32L130F8...
  • 华大单片机部分单片机swd与串口复用,程序上电后不要立即初始化复用的串口,或者把SWD复用为普通的串口,需要稍加延时,不然下次烧写程序不能用swd了,还有isp下载,不能使用复用SWD的串口串口的模式注意用一个tb8...
  • 华大单片机开发总结

    2021-02-24 11:07:56
    1、初始化华大MCU HC32L136K8TA-LQ64 PA05为GPIO时,与PA06一起初始化为输出。实测不具有输出功能。分开初始化时,才正常。
  • 华大单片机DMA学习

    2021-04-13 15:46:34
    #define BUFFER_SIZE 32U // DMA传输源地址 static uint32_t aSRC_Const_Buffer[BUFFER_SIZE] = { 0x01020304, 0x05060708, 0x090A0B0C, 0x0D0E0F10, 0x11121314, 0x15161718, 0x191A1B1C, 0x1D1E1F20, ...
  • 今天介绍下国产超低功耗华大单片机HC32L110开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950免费申请)。HC32L110开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分)。...
  • 今天介绍下国产超低功耗华大单片机HC32F003开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请)。HC32F003开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分)。...
  • 今天介绍下国产超低功耗华大单片机HC32F005开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请)。HC32F005开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分)。...
  • 今天介绍下国产超低功耗华大单片机HC32L136开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请)。HC32L136开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分)。...
  • 使用micro-USB 将开发板与电脑相连,打开一个已经存在的工程(工程如何建立请参考 三分学会国产低功耗华大单片机一 (MDK中新建工程))。 二、工程的编译 点击魔法棒图标如下图所示。 点击Device在芯片型号...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 147
精华内容 58
关键字:

华大单片机串口