GD32F303RCT6
夏侯城临
这个作者很懒,什么都没留下…
展开
-
单片机GD32F303RCT6 (Macos环境)开发 (三十五)—— 数字加速度计 (ADXL345 ) 使能中断获取运动与静止状态
THRESH_ACT寄存器为8位寄存器,保存检测活动的阈 值。数据格式无符号,因此,活动事件的幅度与 THRESH_ACT寄存器的值进行比较。比例因子为62.5 mg/LSB。如果使能活动中断,值为0时,可能导致工作 异常。原创 2023-06-04 12:54:20 · 1136 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (三十四)—— 数字加速度计 (ADXL345)
1、接线上一节的软件模式i2c的方式,选择PB10(SCL) PB11(SDA)。CS接高电平时,才会使能ADXL345 的i2c总线。可根据自己的平台换i2c读写函数,或者spi读写函数。3、ADXL345的寄存器上图看出,xyz轴的数据存在0x32-0x37寄存器中,所以我们通过其他寄存去初始化ADXL345后,从这六个寄存器读取数据就好了。每个寄存器的每个功能都有初始化,对着规格书很容易就能明白。5、各寄存器设置跟读取函数6、头文件定义7、实验现象main函数直接调用void原创 2023-06-03 21:22:20 · 946 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (三十三)—— 光照传感器 (BH1750)
使用管脚为SCL PB10 SDA PB11,移植代码时可换自己的管脚。这一部分在十九章中讲过,与其不同的地方是,这里的us延时函数,换成了定时3做us的函数。原创 2023-06-03 06:30:38 · 677 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (三十二)—— GD32 SPI主从实验 中断模式
主设备还是采用轮询方式去发送数据,本来想在从设备中断中收到数据立即用从设备返回一个数据,但是后来发现,主设备在收数据的时候总是错开一个,第一次收到的数据为0 ,第二次才能收到正常的数据,不知道为什么。中断处理函数每收到一个数据就回跑一次,按理说我收一个发一个,数据spi0收到的数据也应该是对的,但是实验发现,总是差一个数据。master received 第一个数据应该为0x90,但是这里每次都是0x00,不晓得什么原因。从设备采用中断方式去接收数据。原创 2023-06-02 05:45:28 · 1074 阅读 · 4 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (三十一)—— GD32 SPI主从实验 轮询模式
采用全双工模式。原创 2023-06-01 08:57:55 · 349 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (三十)—— GD32设置i2c从机模式的IAP升级
关于i2c从机的设置在17节讲过,这里我们就在17节的基础上将i2c1设置为从机模式,七位从机地址为0x18.原创 2023-05-31 15:13:31 · 885 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十九)—— GD32通过蓝牙透传模块 IAP升级
上一节手机App可以通过HC-08模块控制mcu的开锁,关锁的动作,那么我们是不是可以将mcu的升级文件通过hc-08模块发送给gd32,完成gd32程序的自升级呢?原创 2023-05-27 15:34:29 · 1382 阅读 · 1 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十八)—— 蓝牙透传模块HC-08 Android App开发
a、首先要申请权限,采用动态申请的方式,用户点击确认后方可操作蓝牙。b、搜索蓝牙,之前的版本用startLeScan函数搜索蓝牙,虽然高版本中依然可用,但是google已经废弃了这个函数。目前推荐大家使用BluetoothLeScanner中的startScan这个函数。c、连接蓝牙,用device.connectGatt函数连接透传模块,其中参数BluetoothGattCallback比较关键,这个回调函数会贯穿我们整个代码,写数据,读数据,获取服务都在这个回调中处理。原创 2023-05-26 13:31:54 · 986 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十七)—— 蓝牙透传模块HC-08的调试
因为HC-08用的是0000ffe1-0000-1000-8000-00805f9b34fb这个特征值,我们往这个特征值里写几个数据,而GD32接收到这写数据后,会打印出来,并返还。1、模块为汇承HC-08,GD32我们之前已经把usart1 配置成了dma+idle的方式接收数据,我们的hc-08模块连接的就是这一路usart。2、HC-08的命令可以看一下官网,我们这里不做介绍,我们只做从设备,所以只保证两边的波特率相同即可。我的蓝牙设备名字改成了MaxPro,所以这里用grep过滤了一下。原创 2023-05-25 14:58:53 · 718 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十六)—— 无源蜂鸣器的使用
4、在识别到卡片时候,我们使能time2 ,这时候蜂鸣器响,然后一定时间后,disable_timer,蜂鸣器即可停止响叫,但是因为我的蜂鸣器为低电平触发,而pwm在停止的时候不一定为高电平或者低电平状态,所以在停止pwm的时候,我们将pb0拉高。1、之前一节,我们讲了RC522的使用,在刷卡的同时,灯快速闪烁,但是一般刷卡机在刷卡的同时,会发出滴的一声,所以今天我们用无源蜂鸣器实现这一功能。2、因为是无源蜂鸣器,内部没有震荡源,我们要用pwm使其发出声音,之前有讲过pwm如何产生。原创 2023-05-23 22:52:31 · 435 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十五)——内部flash的使用
而GD32F303RCT6实际为256K的flash,我们为了移植通用性,实际用了前128K。5、调用的地方如下:我们往setting区域写入数据,然后读出来对比。1、之前构建IAP升级的时候,我们将flash分为了四个区。GD32F303小于512K的产品,实际都是2K一页。2、flash写入分两个步骤,一是擦除,二是写入。写入函数,按word写入,每次写入四个字节。原创 2023-05-21 21:53:18 · 1010 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十四)—— W25Q32 spi flash的使用
1、继续使用上节的spi1 ,将数据写入w25Q32,然后读出来,校验一致即可。原创 2023-05-21 20:31:06 · 529 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十三)—— RC522模块的使用
2、利用上节freertos的两个任务,我们一个任务去寻卡,读卡,另一个任务控制led的闪烁,没读到卡的时候,200ms频率闪烁,当读到卡时,改为50ms频率闪烁,闪烁二十次后,再次改为200ms闪烁。其中,快速闪烁的时候,不再响应卡片。我只有一个卡,卡的id为0x7a2e7989,当匹配成功后,灯快速闪烁。1、rc522接口为spi,21节我们已经初始化了spi1,这一节我们继续使用spi1与rc522进行通信。3、Rc522的驱动网上很多,直接套用就行,主要的是要替换成自己的spi读写函数。原创 2023-05-21 17:42:40 · 1012 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十二)—— FreeRTOS的移植
SystemCoreClock这个变量是system_gd32f30x.c中定义的,所以在FreeRTOS中使用的话,要extern进来。提示SVC_Handler PendSV_Handler重重复定义,那么我们屏蔽掉gd32f30x_it.c中的两个函数的定义。2、Application目录下增加FreeRtos目录,将下载的FreeRTOS源码中的如下文件拷贝到FreeRtos目录。4、删减gcc跟Memmang目录:MemMang只保留heap4.c,而GCC目录只保留ARM_CM4F目录即可。原创 2023-05-20 23:45:43 · 983 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十一)—— spi master poll方式读写的简单使用
spi速率通过分频系数来控制 spi_init_struct.prescale = SPI_PSC_16;2、用的管脚为PB12/cs SCK/PB13, MISO/PB14, MOSI/PB15 ,cs为软件控制方式。8、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git。SPI_CK_PL_LOW_PH_1EDGE即mode 0方式,5、cs控制,在读写函数运行前,拉低,读写完成后,拉高。6、main.c中的调用。原创 2023-05-13 16:20:02 · 603 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二十)—— 光感芯片veml7700的使用
设置gain,integration time ,power save mode ,interrupt ,power on.6、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git。main函数调用,先调用init函数,然后在while循环中点用get_lux_data函数。05是得到的data of whole WHITE。1、veml有7个寄存器,每个十六位,见图。01 02 是中断设置的阈值。04 是得到的光的亮度值。03是节能模式的设置。原创 2023-05-13 15:56:04 · 1155 阅读 · 10 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十九)—— 软件模拟i2c的使用
5、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git。2、swi2c_search_device_addr会打印出挂在总线上的设备地址。1、直接上代码,移植时修改使用的管脚即可,频率差不多在94KHZ。3、eeprom里写入几个数据,然后读出来。我使用的是PB10 PB11 这两个管脚。原创 2023-05-12 14:50:31 · 1012 阅读 · 6 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十八)—— 树莓派I2C发送读取任意不限长数据
1、linux操作i2c大体分两种方法,一种是在kernel里增加i2c 设备驱动,另一种是在linux层操作i2c子系统的节点用无驱动设备模型来进行读写操作。2、树莓派的wiringPi库,其实就是第二种,但是wiringPi库操作i2c读写函数有局限性,不能读写多寄存器的设备。3、使用ioctl通过i2c-msg与/dev/i2c-0/1交互,直接上代码。main函数读的时候先发送了6个数据,然后读了四个数据,4、main函数里发送了132个数据,原创 2023-05-11 14:43:52 · 277 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十七)—— i2c1从机中断接收发送数据
1、将i2c1设置为从机模式,与树莓派连接。5、 I2C1_EventIRQ_Handler()、I2C1_ErrorIRQ_Handler() 在i2c.c定义。同时修改i2c.h文件,定义I2C1_MODE为I2C1_MODE_SLAVE,编译烧录后,i2c1即为从机模式。7、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git。树莓派发送数据:i2ctransfer -f -y 1 w4@0x18 0x08 0x09 0xA0 0xA3。原创 2023-05-11 12:24:54 · 1433 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十六)—— Eeprom AT24C08的读取
1、AT24C04 、AT24C08、AT24C016应该都适应这份代码,他们每一页的大小都是16字节。如果是AT24C02的话,每一页的大小为8个字节,修改一下#define I2C_PAGE_SIZE 8 应该也可以正常换页读取。3、At24C08.c 核心就是一个换页写入的操作,因为eeprom不支持连续写入时不支持自动换页,但是连续读取时,是可以自动换页的。同时修改i2c.h文件,定义I2C1_MODE为I2C1_MODE_POLL,at24c08 .c 相关代码才会编译进去。原创 2023-05-11 10:29:47 · 549 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十五)—— i2c1采用DMA方式的读写函数
5、DMA接收函数封装,注意读取一个自己数据的时候,不能采用dma的方式,在函数中做了判断,一个字节的读取继续用poll方式。Application目录的Makefile中 ENABLE_I2C_TEST = yes才会编译I2C1的相关代码。5、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git。同时修改i2c.h文件,定义I2C1_MODE为I2C1_MODE_DMA,这样i2c1的配置为dma模式。1、关于i2c1的DMA的映射如图。原创 2023-05-11 07:08:10 · 1232 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十四)—— i2c1的配置以及读写测试
1、配置PB10、PB11为I2C1的功能,然后用读写函数简单对挂在I2C1上的eeprom设备进行读写测试。4、开机往eeprom写五个字节数据,然后读出来,看是否一致。3、按寄存器地址读写函数封装。2、i2c1的配置函数。原创 2023-05-09 12:55:19 · 512 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十三)—— 串口DMA+IDLE中断接收不定长数据
1、使能PA2 PA3的usart1_tx、usart1_rx功能,接收到数据后,dma从usart1的数据寄存器cpoy数据到内存。IDLE中断,可以理解为发送完一帧数据产生的中断。2、usart1的初始化,分四个部分,nvic设置–>>dma设置–>>串口初始化–>>使能串口的IDLE中断。6、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git。5、现象:用串口助手发送数据时,终端会有打印输出。main.c 添加调用。原创 2023-05-08 18:52:58 · 880 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十二)—— ADC的简单使用
1、利用PA4脚的ADC功能,测量外部电压,PA脚接地时,usart0输出0,PA脚接3.3时输出电压3300(单位mv)6、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git。4、Makefile增加build 选项。3、增加adc.c adc.h 文件。设置成no后,将不编译adc相关代码。main.c在while循环里添加。原创 2023-05-08 16:12:24 · 666 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十一)—— DMA的简单使用
1、定义一个welcome的字符串,用dma的将welcome发送到usart的数据寄存器中,这样我们的串口终端里会显示出welcome的字符串。8、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git。3、usart0数据寄存器的地址为USART0 基地址:0x4001 3800 + offset 0x04。2、dma的映射关系如图,由于用的是usart0_tx功能,所以对应dam0的chuannel3.4、增加dma. dma.h文件。原创 2023-05-08 12:53:50 · 431 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (十)—— RTC的使用
1、GD32内部集成RTC模块,在使用备用电源的情况下,配置备份域功能,可以做到待机数据丢失功能,以及RTC待机唤醒功能。但我手头开发版并没有引出VBAT管脚,所以这里只演示RTC的基本功能,设置时间,显示时间等。6、另外,Makefile中增加了对rtc功能的编译选项,如果ENABLE_RTC_TEST = no的话,将不编译rtc相关代码。2、Common目录下新建rtc目录,将官方demo中的rtc.c rtc.h copy到相应目录。5、开机后,首先设置时间,然后每秒打印一次时间。原创 2023-05-08 09:51:26 · 682 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (九)—— 待机与唤醒
1、上节我们配置了userKey,这一章我们在按下userkey后,使开发版进入待机模式。然后按下wakeup key以后,唤醒开发版。4、现象:按下userkey后,mcu待机,按下wakeup key后mcu唤醒。3、在userkey的中断处理函数里添加待机函数。2、main.c中添加对pmu的配置。原创 2023-05-07 19:39:16 · 672 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (八)—— GPIO外部中断输入
开发版的User Key连接PA1,所以用的是1这条中断线,而0、1、2、3、4这五条中断线有各自对应的中断函数,EXTI0_IRQHandler,EXTI1_IRQHandler,EXTI2_IRQHandler,EXTI3_IRQHandler,EXTI4_IRQHandler。5-9中断线对应EXTI5_9_IRQHandler中断函数,10-15对应EXTI10_15_IRQHandler中断函数。3、新增key_input.c key_input.h文件。原创 2023-05-07 18:53:25 · 839 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (七)—— PWM输出
Tim1、2、3、4、5、6、11、12、13 都是挂在APB1的外设,上图得知如果prescale!=1时,TIMER时钟。1、使用Timer2输出四路pwm.管脚对应关系如下图。2、在timer.c 中增加pwm_config函数。2,所以这几个TIM频率应该的是APB1。原创 2023-05-07 16:21:57 · 784 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (六)——通用定时Tim1的使用
5、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git。1、我们设置Tim1 间隔100ms改变LED的状态,实现LED的闪烁。在Application工程的gd32f30x_it.c中添加以下代码。1⃣️、新建timer.c timer.h 文件。间隔100ms拉高拉低一次。2⃣️、LED的配置。LED灯接PB4管脚。原创 2023-05-07 15:12:59 · 529 阅读 · 2 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (五)—— IAP代码架构工程
一般bootloader工程从0x800000处运行,跑到main函数以后,通过一个跳转函数,跳到Applicaiton的地址,运行Application程序。1⃣️、修改Application的GD32F303RCTx_FLASH.ld文件,将起始地址修改为0x8007000、大小修改为50K。IAP架构工程的好处在于产品上线以后,想要升级的话,不用借助烧录器,就可以完成产品的软件升级。1、IAP一般分两个工程,一个Bootloader工程,一个Application工程。这两个工程的差异后面会讲。原创 2023-05-07 14:52:43 · 1116 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境) 开发(四)—— 配置usart0以及printf的使用
1、数据手册显示PA9 PA10可用作usart功能,我们将用这两个管脚用作我们的调试打印的接口。2、在common目录下,新建usart目录,新建usart.c usart.h文件。3、打印flash分区信息。原创 2023-05-07 14:17:57 · 507 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (三)—— systick的配置
设置SysTick的时钟源,若系统时钟为108MHz,经过8分频后,SysTick的时钟为13MHz,也就是说每计数一次需要的时间为 T = 1/(13MHz),换算一下,即T = 1/13 us,换言之:延时 1 微妙,需要计数13次,因此微妙级别的倍频因子fac_us即等于13,为了可移植性,fas_us = (系统内核时钟频率) / 8000000,毫秒级别的倍频因子fac_ms = 1000*fac_us即可。1、GD官方F303系统的固件库中只提供ms的延时函数,采用的是中断的方式。原创 2023-05-07 11:07:17 · 1059 阅读 · 5 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (二)—— RCU的配置
预分频器可以配置AHB、APB2和APB1域的时钟频率。AHB、APB2、APB1域的最高时钟频率 分别为120MHz、120MHz、60MHz。startup_gd32f303rct6.s 调用 bl SystemInit。1、GD32F303RCT6的system clock最大为120MHZ,system_gd32f30x.c SystemInit函数。所以只要修改下图这个宏就可以修改system clock。2、开机配置system clock的流程。这样我们就修改了系统的时钟。原创 2023-05-07 10:33:34 · 634 阅读 · 0 评论 -
单片机GD32F303RCT6 (Macos环境)开发 (一)—— macos环境搭建
9、启动文件 startup_gd32f303rct6.s 对比gd官方的.s文件,主要修改了中断的函数名,auto/chip 如果auto制定擦除要烧写的那一段,chip的话整片flash都会擦除。1、vscode/arm-none-eabi-/pyocd 安装可百度。Application为App代码,程序从0x08007000处运行。后面用到的启动文件以及链接文件同样由此修改而来。2、pyocd 安装完成后,连接st-link。7、整个application的代码架构如下。原创 2023-04-26 10:54:00 · 1631 阅读 · 0 评论