GD32串口通信注意事项
GD32串口通信
虽说GD32与stm32采用同样的ARM® Cortex®-M3内核,而且GD32很大程度上可兼容stm32的程序,但是也存在着一些差异;所以为了使用上减少出错,使用GD32时尽量采用GD32官方库来编写程序。
GD32与STM32在串口通信上的差异
GD32 | STM32 |
---|---|
USART0 | USART1 |
USART1 | USART2 |
USART2 | USART3 |
也就是GD32在串口数是从0开始,而stm32是从1开始;特别注意的是GD32在手册上串口数也是从1开始的,小编为此也是郁闷得很。
下面就是常规的串口操作啦,大致上与stm32 相同。
串口初始化
void usart_init(void)
{rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_USARTx);rcu_periph_clock_enable(RCU_AF);/* configure USART Tx as alternate function push-pull */gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_10); /* USART configure */usart_deinit(USARTx);nvic_irq_enable(USARTx_IRQn, 0, 0);usart_baudrate_set(USARTx, bd);usart_word_length_set(USARTx, USART_WL_8BIT);usart_stop_bit_set(USARTx, USART_STB_1BIT);usart_parity_config(USARTx, USART_PM_NONE);usart_hardware_flow_rts_config(USARTx, USART_RTS_DISABLE);usart_hardware_flow_cts_config(USARTx, USART_CTS_DISABLE);usart_receive_config(USARTx, USART_RECEIVE_ENABLE);usart_transmit_config(USARTx, USART_TRANSMIT_ENABLE);usart_interrupt_enable(USARx, USART_INT_RBNE);usart_interrupt_enable(USARTx, USART_INT_ERR);usart_enable(USARTx);
}
串口发送
void UARTx_SendSpBuffer(uint32_t usart_periph,uint8_t* pSda,uint8_t len)
{int i=0;for(i=0;i<len;i++){while(RESET == usart_flag_get(usart_periph, USART_FLAG_TBE));//等待数据寄存器变空usart_data_transmit(usart_periph, *pSda); pSda++;}while(RESET == usart_flag_get(usart_periph, USART_FLAG_TC));
}
串口接受函数
void USARTx_IRQHandler(void )
{if(RESET != usart_interrupt_flag_get(USARTx, USART_INT_FLAG_RBNE)){/* receive data */value = (uint8_t)usart_data_receive(USARTx);usart_interrupt_flag_clear(USARTx,USART_INT_FLAG_ERR_FERR);}
}
附:
1.modbus rtu格式说明
功能码说明
功能码 | 说明 |
---|---|
03 | 读取输出寄存器 |
04 | 读取输入寄存器 |
06 | 写单个寄存器 |
10 | 写多个寄存器 |
CRC校验说明
modbus crc16为高位在后,低位在前
功能码 | 说明 |
---|---|
CRCL | 低位在前 |
CRCH | 高位在后 |
读操作
modbus读取数据采用功能码03或04,其中正常来说03读取输出寄存器数据,04读取输入寄存器数,也就是03读取设置参数等数据,04读取实时采集的数据。
项目 | Value | 位数 |
---|---|---|
通信地址 | 0~255 | 8位 |
功能码 | 03/04 | 8位 |
起始地址 | 0~65535 | 16位 |
寄存器个数 | 0~65535 | 16位 |
CRC校验 | 0~65535 | 16位 |
写操作
项目 | Value | 位数 |
---|---|---|
通信地址 | 0~255 | 8位 |
功能码 | 06 | 8位 |
起始地址 | 0~65535 | 16位 |
待写入的数据 | 0~65535 | 16位 |
CRC校验 | 0~65535 | 16位 |
2.GD32中断函数名及中断服务函数
项目 | 路径 |
---|---|
中断函数名及其优先级 | gd32f10x.h |
中断服务函数 | startup_gd32f10x_md.s |
GD32串口通信注意事项相关推荐
- RS232与串口通信的4个注意事项详解
RS232和串口通信,用于串口设备的数据采集软件,包括仪表.天平.秤或任何RS232仪器.WinWedge直接将数据捕获到Excel.Access或任何Windows应用程序或网页.它甚至可以从COM ...
- STM32(GD32)串口通信ORE(overrun error)导致死机
STM32串口通信ORE(overrun error)导致死机 现象就是:我要接收到16个字节到数据后就开始处理数据,但是主机发过来的指令超过了16个字节,就导致我这里死机了,其实我这里不应该死机的, ...
- GD32 F303RCT6串口通信和IAP升级
#ifndef __CLOUDTASK_H #define __CLOUDTASK_H#include "task.h" #include "queue.h" ...
- python第三方库之学习pyserial库--串口通信
pyserial串口通信库 1.安装pyserial库 2.填写串口参数的注意事项 3.简单封装一下 4.碰到的bug 1.安装pyserial库 pip install pyserial versi ...
- android 串口开发第二篇:利用jni实现android和串口通信
一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...
- java与单片机通信_Java实现串口通信与单片机通信实例..【Pnoter】
一 · 在windows操作系统下,实现Java串口通信,需要用到sun提供的串口通信包,javacomm[可以去Java站点去下载最新版本的压缩包,然后解压]. 解压之后要用到压缩包中的三个文件,将 ...
- STM32单片机与Openmv的串口通信
openmv与stm32的串口通信 简谈闲话 Openmv主要代码 STM32单片机的配置 运行效果图片如下 简谈闲话 这两天本人利用周末时间粗略的学习一下openmv的使用,目的是用openmv图像 ...
- 【STM32F429的DSP教程】第9章 Matlab的串口通信实现
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第9章 Matlab的串口通信实现 本章节主要为大家讲解 ...
- MSP430G2553 串口通信
MSP430G2553 串口通信 记下来 加深一下自己的理解 希望 有新手看到可以有点启发 记录下来自己的点点滴滴 终于感觉自己有那么一点进步了 哈哈 未来的日子在努力一些 一个菜鸟 ...
最新文章
- TEE(Trusted Execution Environment)简介
- [SOJ1039]Phone Home(深搜,染色问题)
- 在git项目误上传了本地idea配置文件,如何解决?
- [spring]Attribute scope must be declared for element type bean
- java tbase_使用Java从firebase获取数据
- 计算机领域hpec会议,2018 IEEE High Performance extreme Computing Conference HPEC
- [转]Winform不规则窗体的实现心得
- Python标准库 - subprocess
- Android移动应用基础教程【服务】
- RHEL6.3下编译安装ffmpeg
- Linux 杀死进程方法大全(kill,killall)
- 使用maven将jar包下载到本地仓库
- 通过SQL语句建立数据库. 表
- Linux性能工具:系统CPU
- 星期一到星期日的英文 缩写 读音 巧记方法
- mysql数据库地址 名称_数据库地址和名称是什么?怎么知道自己地址和名称?
- 数据分析软件Excel,Origin, Matlab,Mathmatica和Maple
- 记一次微信小程序云函数操作Mysql数据库
- javascript 汉字生成拼音
- 【1-2】非本人智慧结晶,有疑问请咨询相关技术人员!
热门文章
- from batchgenerators.transforms import ComposeImportError: cannot import name ‘Compose‘ from ‘batch
- 计算机二级office公式汇总,计算机二级Office2010Eexcel公式汇总
- HDU 4389 - X mod f(x)
- linux 繁体中文转为简体,Linux下对文件进行编码转换(简体→繁体,繁体→简体,简体繁体→UTF-8)...
- 哥大五年CV岁月:只有开心,才能做出有影响力的工作
- 拉钩教育课程管理系统接口文档
- Java 6-1 人口统计
- 计算机任务无法结束,简单几步解决win7任务管理器无法结束进程的问题
- Specified VM install not found: type Standard VM, name jre7
- ZO1X(功能安全验证)介绍