大怨种经过3天的学习终于把USART串口与电脑通信控制LED完成了,这过程中遇到了许多问题,参考了许多文章,在这就不把所有参考文章都一一列出了,基本上所有的HT32的学习笔记大家的USART.c的文件都大同小异。大家可能一般都使用CH340转串口,我这个初学者是直接使用usb数据线直接烧入的,就出现了能发送数据给电脑,但HT32不能接收数据。后参考了这篇博主的文章 http://t.csdn.cn/ky2Is经过尝试把配置USART1的交替模式4、5改成交替模式14、15

 GPIO_PullResistorConfig(HT_GPIOA, GPIO_PIN_15, GPIO_PR_UP);    //记得这里也要改GPIO_PullResistorConfig(HT_GPIOA, GPIO_PIN_3 , GPIO_PR_UP);AFIO_GPxConfig(GPIO_PA, AFIO_PIN_14, AFIO_FUN_USART_UART);//如果要使用数据线进行串口通信功能,把PA4 5改成PA14 15AFIO_GPxConfig(GPIO_PA, AFIO_PIN_15, AFIO_FUN_USART_UART);//并且把开发板的跳线帽接到Tx端AFIO_GPxConfig(GPIO_PA, AFIO_PIN_2 , AFIO_FUN_USART_UART);AFIO_GPxConfig(GPIO_PA, AFIO_PIN_3 , AFIO_FUN_USART_UART);

 经过尝试不管是改成14、15还是原先的4、5都不能让HT32接收电脑发送的数据,所以这边还请大佬们教教我

完成实现的编码如下

参考这位博主的文章http://t.csdn.cn/DtrP9

usart.h

​
#ifndef _USART_H
#define _USART_H#include "ht32f5xxxx_01.h"
#include <stdio.h>#define DEBUG_USART0                       (0)
#define DEBUG_USART1                       (1)#if  DEBUG_USART0
//串口0 USART - 0
#define COM_PORT                   (HT_USART0)
#define COM_IRQn                   (USART0_IRQn)
#define COM_IRQHandler             (USART0_IRQHandler)#define COM_TX_GPIO_ID             (GPIO_PA)
#define COM_TX_AFIO_PIN            (AFIO_PIN_2)
#define COM_TX_AFIO_MODE           (AFIO_FUN_USART_UART)#define COM_RX_GPIO_ID             (GPIO_PA)
#define COM_RX_AFIO_PIN            (AFIO_PIN_3)
#define COM_RX_AFIO_MODE           (AFIO_FUN_USART_UART)#elif DEBUG_USART1
//串口1 USART - 1
#define COM_PORT                   (HT_USART1)
#define COM_IRQn                   (USART1_IRQn)
#define COM_IRQHandler             (USART1_IRQHandler)#define COM_TX_GPIO_ID             (GPIO_PA)
#define COM_TX_AFIO_PIN            (AFIO_PIN_4)
#define COM_TX_AFIO_MODE           (AFIO_FUN_USART_UART)#define COM_RX_GPIO_ID             (GPIO_PA)
#define COM_RX_AFIO_PIN            (AFIO_PIN_5)
#define COM_RX_AFIO_MODE           (AFIO_FUN_USART_UART)#endifvoid USARTx_Init(void);
void Usart_Sendbyte(HT_USART_TypeDef* USARTx, u8 Data);
void Usart_SendArray(HT_USART_TypeDef* USARTx, u8 *array,u8 num);
void Usart_SendStr(HT_USART_TypeDef* USARTx, uint8_t *str);#endif​

usart.c

#include "usart.h"static void USART0_CKCU_Config()
{CKCU_PeripClockConfig_TypeDef CCLOCK;CCLOCK.Bit.AFIO   = 1;CCLOCK.Bit.USART0 = 1;CCLOCK.Bit.PA           = 1;CKCU_PeripClockConfig(CCLOCK, ENABLE);
}static void USART1_CKCU_Config()
{CKCU_PeripClockConfig_TypeDef CCLOCK;CCLOCK.Bit.AFIO   = 1;CCLOCK.Bit.USART1 = 1;CCLOCK.Bit.PA           = 1;CKCU_PeripClockConfig(CCLOCK, ENABLE);
} static void USART_AFIO_Config()
{AFIO_GPxConfig(COM_TX_GPIO_ID, COM_TX_AFIO_PIN, AFIO_FUN_USART_UART);AFIO_GPxConfig(COM_RX_GPIO_ID, COM_RX_AFIO_PIN, AFIO_FUN_USART_UART);
}static void USARTx_Config()
{USART_InitTypeDef USART_InitStructure;/*USART初始化*波特率:115200*字节长度:8位*停止位:1位*校验位:无           *模式:正常模式**/USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WORDLENGTH_8B;USART_InitStructure.USART_StopBits = USART_STOPBITS_1;USART_InitStructure.USART_Parity = USART_PARITY_NO;USART_InitStructure.USART_Mode = USART_MODE_NORMAL;USART_Init(COM_PORT, &USART_InitStructure);/* 设置USART中断标志 */USART_IntConfig(COM_PORT, USART_INT_RXDR, ENABLE);/* 使能USART接收、发送 */USART_TxCmd(COM_PORT, ENABLE);USART_RxCmd(COM_PORT, ENABLE);/* 初始化中断 */NVIC_EnableIRQ(COM_IRQn);}//初始化函数
void USARTx_Init()
{USART0_CKCU_Config();USART1_CKCU_Config();USART_AFIO_Config();USARTx_Config();
}// 发送一个字节
void Usart_Sendbyte(HT_USART_TypeDef* USARTx, u8 Data)
{USART_SendData(COM_PORT, Data);// 等待发送数据寄存器清空while (USART_GetFlagStatus(COM_PORT, USART_FLAG_TXDE) == RESET);
}//发送每个元素数据长度为8位的数组
void Usart_SendArray(HT_USART_TypeDef* USARTx, u8 *array,u8 num)
{u8 i;for( i = 0;i < num;i++){Usart_Sendbyte(USARTx,*array);array++;}
}// 发送字符串
void Usart_SendStr(HT_USART_TypeDef* USARTx, uint8_t *str)
{uint8_t i;for(i = 0;str[i] != '\0';i++){Usart_Sendbyte(USARTx,str[i]);}
}// 重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到串口 */USART_SendData(COM_PORT, (uint8_t) ch);/* 等待发送完毕 */while (USART_GetFlagStatus(COM_PORT, USART_FLAG_TXDE) == RESET);     return (ch);
}// 重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{/* 等待串口输入数据 */while (USART_GetFlagStatus(COM_PORT, USART_FLAG_RXDNE) == RESET);return (int)USART_ReceiveData(COM_PORT);
}/*中断函数*/
/*void COM_IRQHandler(void)
{u8 data;if( USART_GetFlagStatus(COM_PORT, USART_FLAG_RXDR) )//接收中断{data = USART_ReceiveData(COM_PORT); //读取接收到的数据printf("data = %c\n",data);}
}*/

博主那边的这个printf.c文件是不在HT32工程里的文件,这个我就没有修改了,但能实现串口通信与串口助手的printf的文字输出

main.c

#include "ht32.h"
#include "ht32_board.h"
#include "led.h"
#include "delay.h"
#include "usart.h"uint8_t data = 0;int main()
{led_init();USARTx_Init();Usart_SendStr(COM1_PORT,(uint8_t *)"------HT32 UART TEST-------\r\n");//循环发送字符串,测试用while(1){}
}void COM_IRQHandler(void)
{u8 data;if( USART_GetFlagStatus(COM_PORT, USART_FLAG_RXDR) ){data = USART_ReceiveData(COM_PORT);printf("data = %c\r\n",data);if(data == '0'){led_on();printf("LED ON\r\n");}else if(data == '1'){led_off();printf("LED OFF\r\n");}}
}

led.c

#include "led.h"void led_init(void)
{CKCU_PeripClockConfig_TypeDef LEDClock = {{ 0 }};LEDClock.Bit.PC = 1; //使能PCCKCU_PeripClockConfig(LEDClock, ENABLE); //一定要先使能时钟,再配置下面的GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_15|GPIO_PIN_14, GPIO_DIR_OUT); //设置PC15为输出led_off();
}void led_on(void)
{GPIO_WriteOutBits(HT_GPIOC, GPIO_PIN_15, RESET);GPIO_WriteOutBits(HT_GPIOC, GPIO_PIN_14, RESET);
}void led_off(void)
{GPIO_WriteOutBits(HT_GPIOC, GPIO_PIN_15, SET);GPIO_WriteOutBits(HT_GPIOC, GPIO_PIN_14, SET);}

再次感谢这位博主。

合泰HT32F52352 USART串口与电脑通信控制LED相关推荐

  1. 合泰HT32F52352串口通信学习笔记

    HT32F52352芯片资料 作为一个开发者,学会找 / 看芯片资料很重要!找资料最好的方法就是直接在官网找. 比如想找ht32f52352芯片的资料可以直接在合泰的官网下载.https://www. ...

  2. 【STM32F10x串口通信控制LED输出模式以及亮灭】

    STM32F10x串口通信控制LED不同模式以及亮灭 非常简单!具体功能如下: 默认状态:key0->绿灯翻转 key1->红灯翻转 串口输入1:key0->红灯翻转 key1-&g ...

  3. 【合泰HT32F52352初次使用之LED闪烁】

    合泰HT32F52352初次使用之LED闪烁 最近合泰芯片刚来,照常还是先做点灯操作,刚开始是使用的自带的例程里面的过程点了灯,发现里面的东西太多了对于初次接触并不友好,虽然和stm32的差异不大,但 ...

  4. 《STM32从零开始学习历程》——USART串口通讯实验篇2——指令控制LED灯实验

    <STM32从零开始学习历程>@EnzoReventon USART串口通讯实验篇2--指令控制LED灯实验 本实验是在<USART串口通讯实验篇1--中断接收与发送>的基础上 ...

  5. 基于STM32安装Stm32CubeMX,配合Keil完成LED流水灯和USART串口通讯程序,及其管脚的时序波形观察

    目录 一.使用HAL库完成LED流水灯 (一).用STM32CUBEMX生成工程文件 (二).用Keil仿真调试并生成hex文件 (三).用STM32串口烧录程序 (四).实物连接 二.使用HAL库完 ...

  6. 串口通信-电脑控制单片机点亮LED

    前言 此篇只对各函数功能做通俗易懂的解释,适合初学者理解串口通信的功能. 一.串口通信 1.什么是串口通信 我们使用的usb转串口是经典的串口通信之一,实现了电脑与单片机之间的联系,将程序通过串口从电 ...

  7. 在 stm32CubeMX下生成程序完成流水灯以及完成STM32的USART串口通讯程序实现STM32系统给上位机(win10)连续发送“hello windows”

    目录 一.STM32CubeMX简介及安装 二.利用STM32CubeMX生成代码 1.创建项目 2.配置芯片 3.导出项目 ​ 三.Keil中补充代码完善功能 四.在Keil中观察实验波形 五.US ...

  8. 32位合泰单片机实现串口通信

    文章目录 一.需要有的硬件实物和软件 二.需要了解的有关串口通信的知识 三.HT32实现串口通信代码 一.需要有的硬件实物和软件 HT32(32位合泰单片机,以下简称HT32) 数据线(一定要是可以传 ...

  9. 了解串口协议,及完成STM32的USART串口通讯程序,并用keil观察波形

    文章目录 前言 一.串口协议 1.RS-232 2.485标准 二.RS-232.485和TTL电平 1.RS-232电平 2.485 3.TTL电平 4.区别 三.USB/TTL转232 1.CH3 ...

最新文章

  1. 计算机vb2级知识点,二级考试(VB)知识点细化(针对浙江省计算机等级考试)
  2. 爱上MVC3系列~开发一个站点地图(俗称面包屑)
  3. Unity3D热更新全书-脚本(二) 两级分化
  4. Sql—表格的建立,删除,数据的建立与删除-总结篇
  5. 数据结构之空间复杂度和空间复杂度
  6. 何传启:第六次科技革命的三大“猜想
  7. ajax清请求过程,JS深入基础之Ajax的请求过程
  8. 中级软件测试笔试题100精讲_软件测试工程师笔试题目(含答案)
  9. 苹果越狱后怎么还原_iOS 软件证书失效怎么办?越狱后你可以这么做
  10. NANK南卡降噪耳机和小米蓝牙耳机哪个好?谁更值得入手?
  11. Adobe Dreamweaver CS5和Photoshop CS5序列号
  12. Vue3 - 组件通信(子传父)
  13. Egencia smartmix航班排名模型背后的运营研究
  14. 管理经济学的大作业——边际效应分析在学习生活中的应用
  15. Acwing春季每日一题 混合牛奶(朴素做法和优化做法)
  16. table中英文值显示其对应中文
  17. C++ Armadillo矩阵库的安装与基本用法
  18. 视频教程-SpringBoot+MongoDB+Vue前后分离-Java
  19. 文旅融合助力沉浸式夜游体验项目的发展
  20. 数据挖掘:概念与技术(第三版)之第十章的学习记录

热门文章

  1. 会声会影2022一键安装图文详细教程
  2. 被讨厌的勇气:人际关系论
  3. Redis 如何实现防止超卖和库存扣减操作?
  4. 成都拓嘉启远:如何全面看待拼多多百亿补贴
  5. 如何用java实现水仙花数
  6. 人脸识别0-03:insightFace-测试集数据制作-史上最全
  7. Redis 设计与实现——读书笔记
  8. 微服务网关和服务注册中心
  9. [c语言]倒置字符串 -牛客网
  10. linux的标准输入输出