![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
GD32F303红枫派开发板教程
文章平均质量分 91
GD32F303红枫派使用手册
聚沃科技&GD32 MCU
聚沃科技官网:www.gd32bbs.com;GD32 MCU技术交流Q群:859440462;V群+13905102619 开发板购买:https://juwo.taobao.com/
展开
-
【GD32F303红枫派使用手册】第三十节 CAN -CAN通信实验
连续输出显性电平最多的单元可继续发送,比如两个CAN单元同时发送数据,其中单元一发出的数标准帧的ID为0b,00110000000,而单元二发出的标准帧ID为0b,00100000000,可以看到发送到第4位时,单元一发出的是逻辑“1”,单元二的是逻辑“0”,因为总线上“0”比“1”优先级搞,所以此时单元二获得总线发送权,单元一将自动停止发送。好,现在就可以来算CAN的波特率了,按照CAN分频系数为6,位段1为5,位段2为4,一个位占用的时间为6/60M*10 = 1ms,也就是波特率=1M。原创 2024-07-05 13:19:57 · 1133 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十九节 USB-IAP升级实验
IAP主函数如下所示,开始主要为delay延迟配置以及按键配置,之后判断KEY1按键是否被按下,如果KEY1按键没被按下,将会进入到跳转代码段,如果APP_LOADED_ADDR(0x08008000U)地址中有对应APP的堆栈指针,则认为APP段有数据可直接跳转执行。IAP的功能为通过USB接口通信的方式对app端代码进行更新。将本实验历程烧录到红枫派开发板中,打开GD32 ALL IN One上位机,如下图所示,接口选择USB,Bootloader协议选择IAP,之后点击connect进行连接。原创 2024-07-04 10:06:09 · 508 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十八节 USB-虚拟串口实验
数据接收通过cdc_acm_data_receive()函数实现,该函数的程序如下所示。本例程主函数如下,该函数架构与虚拟键盘例程相似,当USBD设备初始化且枚举完成后,USB设备首先通过cdc_acm_check_ready()函数check是否准备数据发送,如果不需要发送就调用cdc_acm_data_receive()函数接收上位机发送的数据,如果需要发送就调用cdc_acm_data_send()将接收到的数据发送给主机,主机再回显到串口调试助手的接收显示界面中。该设备类采用批量传输。原创 2024-07-03 11:08:34 · 1121 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十七节 USB-虚拟键盘实验
首先为大家介绍USB通信的一些基础知识,包括USB协议、枚举流程等,建议读者可以多多阅读USB协议,以更深入了解USB,USB官网链接如下,可参考:https://www.usb.org/在该函数中,如果设备已经被枚举成功,则首先将prev_transfer_complete标志位设置为0,表明接下来将进行发送数据,数据并未发送完成,之后,调用usbd_ep_send()将需要发送的报告拷贝到USB外设缓冲区中并设置端点为有效状态,等待主机发送IN令牌包,USB设备将外设缓冲区中的数据发送给主机。原创 2024-06-27 10:15:13 · 1132 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十六节 EXMC-液晶驱动实验
这里巧妙的是使用EXMC_Ax引脚实现D/C的数据/命令切换功能,所以我们只需要选择一个方便布线的EXMC_Ax引脚,然后在软件中对该引脚对应的EXMC逻辑地址进行操作就可以实现程序读写不同地址时,D/C引脚的状态切换,从而实现访问一个EXMC地址时是数据或命令类似,访问该地址位反向的任意地址就是另外一个类型。exmc使用了扩展模式,这样读和写的时序可以单独配置,因为LCD对读和写的要求时间是不同的,读的时候速率不能太高,如果使用一种参数类型就会为了满足读的要求而降低写的速率,影响最终刷屏的性能。原创 2024-06-26 09:42:36 · 838 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十五节 EXMC-外部SRAM读写实验
EXMC是MCU的外部存储控制器,可以配置实现各类片外设备的通信协议,包括SRAM、PSRAM、NOR FLASH、NAND FLASH等,也可以通过配置实现一些其他通信协议,如8080接口的LCD驱动、FPGA通信等,可灵活的实现很多异步同步信号输入输出,时序时间可配置。EXMC在初始化后,基本上通过程序的地址映射就可以进行操作了,需要根据外部器件的要求进行exmc相关参数配置,exmc可配置参数有很多,但选定好一个模式后实际在这个模式下需要配置的参数是有限的,一些结构体成员只需要按默认参数配置即可。原创 2024-06-25 10:06:09 · 1232 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十四节 DHT11温湿度传感器检测实验
dht11_check()为check DHT11是否正常连接以及工作,其实现如下,其主要通过判断DHT11是否能够响应主机的复位请求操作来判断DHT11是否连接以及工作正常,如果工作正常,该函数返回值为0,否则返回1.DHT11温湿度读取函数如下,通过该函数将会连续读取5个字节数据,前两个为湿度数据,之后两个为温度数据,最后一个数据为校验和。dht11_reset()为复位DHT11操作函数,其实现如下,如原理中介绍,首先拉低数据引脚20ms,之后拉高30us,实现对DHT11的复位操作。原创 2024-06-24 10:21:30 · 1094 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十三节 SDIO-SD卡读写实验
SDIO初始化配置在sd_io_init()函数中,其中包括sd_init()初始化、sd_card_information_get()SD卡信息获取、sd_card_select_deselect()SD卡选择、sd_cardstatus_get()SD卡状态获取、sd_bus_mode_config()SD卡总线宽度配置以及sd_transfer_mode_config()SD卡通信模式配置,历程中选择了4线查询模式。SD卡正常工作,就是根据SD卡初始化流程图,发送命令,收到回复,直到流程结束。原创 2024-06-23 11:33:04 · 1167 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十二节 IIC-IIC OLED显示实验
OLED显示图片函数如下,其中形参说明如下:x为图片起始地址的x坐标,y为图片起始位置的y坐标,x_res为图片分辨率的x轴分辨率,y_res为分辨率的y轴分辨率,比如图片为128*32显示,则x_res为128,y_res为32,pbuff为图片数组的指针。将图片调整到合适分辨率,如果分辨率比较大的话,可以使用PS等工具,调整到128*64分辨率以内,格式的话建议调整为bmp格式文件。主函数代码如下所示,调用bsp_oled_init进行OLED初始化,之后循环显示图片/字符串以及数字。原创 2024-06-22 10:27:46 · 804 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十一节 I2C-EEPROM读写实验
I2C开始信号后,第一个字节为器件地址,由1010+3位块地址+1位读写标志组成, 3位块地址刚好可以表示 8个块, 所以一次写完256字节,换到下一下块的时候,要重新更改器件地址。下图为AT24CXX系列EEPROM相关参数,由该图可知,AT24C16的存储容量为16Kbit,共2048字节,共128页,每页为16字节。EEPROM buf读取接口函数实现如下,通过该函数可实现对EEPROM任意地址的多字节数据读取,内部也对读取的地址进行自动识别从机地址。◼ 同一接口既可实现主机功能又可实现从机功能;原创 2024-06-21 10:49:37 · 909 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二十节 SPI-SPI NAND FLASH读写实验
从图中可以看出,本实验使用的是普通单线SPI,GD5F1GQ5UEYIGY的片选由GD32F303ZET6的PG13控制(因PG14不是SPI的NSS管脚,所以本实验用主机NSS软件模式,,通过普通IO控制片选),GD25Q32ESIGR的SO、SI和SCLK分别和GD32F303ZET6的PB4(SPI2_MISO)、PB5(SPI2_MOSI)以及PB3(SPI2_CLK)相连。SPI NAND简化了NAND的接口设计和尺寸,SPI接口更是降低了主控对接口的要求,同时内置ECC。原创 2024-06-20 10:27:44 · 600 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十九节 SPI-SPI NOR FLASH读写实验
这样,两个移位寄存器中的内容就被交换。2、按page写数据函数bsp_spi_nor_page_write,该函数实现在page范围内写数据,该函数流程是:使能NOR FLASH的写功能->拉低片选->向NOR FLASH发送写指令WRITE(0x02)->从低地址到高地址发送要写的地址(每次进行写数据时,只需要给初始地址即可,写完一个数据后NOR FLASH内部会自动把地址+1)->写数据->拉高片选->等待NOR FALSH内部操作完成(循环去读NOR FLASH状态,直到读出编程状态为0)原创 2024-06-19 10:45:21 · 1245 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十八节 USART-485通信实验
与之相对的,485协议输出的是差分信号,经过TTL转485芯片的转换后其有效信息为两条信号线的电压差,即可大大消除通信时的共模干扰,同时由于其传递的信息随时可以在硬件层面上被测量,而且整个转换过程完全为硬件操作,无需软件编写,因此是种硬件协议。如果外部有个扰源对其进行干扰,使双绞线进行485信号传输的时候,由于其双绞,干扰对于485+,485-的干扰效果都是样的,那电压差依然是不变的,对于485信号的干扰缩到了最小。同样的道理,如果有屏蔽线起到屏蔽作的话,外部扰源对于其的扰影响也可以尽可能的缩小。原创 2024-06-18 09:59:09 · 1181 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十七节 USART-中断串口收发实验
本例程main函数首先进行了延时函数初始化,再初始化UART为中断模式,接着配置串口BOARD_UART,开启串口中断NVIC,这里使用到了IDLE中断,TBE中断和RBNE中断,然后配置串口D中断接受,最长100个字节,所以我们可以给串口发送100个字节以下长度的数据。前面章节中我们已经学习了串口的状态标志位,本实验就是使用TBE中断和RBNE中断来实现中断收发数据,实验原理是RBNE中断用来接受数据,IDLE中断用于判断发送方数据结束,TBE中断用于发送数据。由聚沃科技原创,来源于。原创 2024-06-17 10:07:27 · 447 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十六节 USART-DMA串口收发实验
当需要使用DMA接受时,需要配置DMA工作为外设到内存的模式,DMA的源地址需要设置为串口的数据寄存器,当DMA使能,一旦串口收到一个字节数据,RBNE(接受非空)标志位为1,则DMA自动将数据寄存器中的数据搬运到内存中。在前面ADC章节中,我们介绍了DMA的工作原理,这里就不多做介绍。当需要使用DMA发送时,需要配置DMA工作为内存到外设的模式,DMA目标地址需要设置为串口的数据寄存器,当DMA使能后,一旦串口的TBE(发送空)标志位为1,则DMA自动从内存中搬运数据到串口数据寄存器中。原创 2024-06-15 10:27:05 · 812 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十五节 USART-printf打印实验
校验位是为了保证通信的可靠性,如果是奇校验,需要保证传输的数据总共有奇数个逻辑高位,如果是偶校验,需要保证传输的数据总共有偶数个逻辑高位。和串行通讯相对应的是并行通讯,并行通信指一个传输接口可以传输8个bit即一个byte(有时甚至更多),虽然串行通信比并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。如果在3个采样点中有2个或3个为0,该数据位被视为0,否则为1。当发送方开始发送一帧数据时,起始位会最先发送,而对于接收方来说,检测到起始位后,即使自己的接收时钟与发送方的数据同步。原创 2024-06-14 09:55:52 · 866 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十四节 DAC-输出电压实验
当使能了外部触发模式(通过设置 DAC_CTL 寄存器的 DTENx 位控制),当已经选择的触发事件发生, DAC 保持数据(DACx_DH)会被转移到 DAC 数据输出寄存器(DACx_DO)。DAC有两个类型的数据寄存器——DAC保持数据寄存器(DACx_DH)和DAC 数据输出寄存器(DACx_DO),用户将数字量写入到DACx_DH中,只有当DACx_DH中的数据被转移到DACx_DO时,IO口才会实际输出对应电压值。DAC可以将 12 位的数字数据转换为外部引脚上的电压输出。原创 2024-06-13 10:09:09 · 1123 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十三节 DC-内部温度传感器和参考电压采样实验
本例程main函数首先进行了延时函数初始化,为了演示实验结果,这里初始化了BOARD_UART串口,关于串口的使用,请读者参考串口章节,然后是内部通道ADC的配置和中断使能。在主循环中,先出发一次内部通道ADC,然后延时1s,在延时过程中ADC转换结束会进入ADC中断函数,中断函数将两个注入组通道数据赋给Vref_Vtemp_data数组,延时结束后,对温度和内部电压进行计算并将计算结果打印出来。在bsp_adc.c中定义了内部通道ADC配置的函数bsp_Vref_Vtemp_ADC_config。原创 2024-06-12 10:17:17 · 623 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十二节 ADC-双轴按键摇杆多通道循环采样实验
本实验中是ADC配合DMA来使用,如果使用DMA去搬运ADC0的数据,从上表查询得知需要使用DMA0的通道0,如果是搬运ADC2的数据,则要用到DMA1的通道4。双轴按键摇杆主要由两个电位器和一个按键开关组成,两个电位器随着摇杆扭转角度分别输出X、Y轴上对应的电压值,在Z轴方向上按下摇杆可触发轻触按键,在配套机械结构的作用下,无外力扭动的摇杆初始状态下,两个电位器都处在量程的中间位置。摇杆一般在航模中的无人机、电玩、遥控车、云台等设备上应用广泛,很多带有屏幕的设备也经常使用摇杆作为菜单选择的输入控制。原创 2024-06-11 10:18:56 · 983 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十一节 ADC-电源电压单通道ADC检测实验
举个例子,现需要按照CH3->CH2->CH1的顺序进行注入组转换,则设定IL[3:0] = 2,然后设定ISQ1为CH3,ISQ2为CH2,ISQ3为CH1,则当开始注入组转换时,ADC首先进行ISQ1规定的通道即CH3的转换,再进行ISQ2规定的通道即CH2的转换,最后进行ISQ3规定的通道即CH1转换,当这三个通道转换完后,注入组转换结束。触发源分为内部触发和外部触发,内部触发是指当ADC_ON已经为“1”的情况下,不改变其他ADC寄存器,再往ADC_ON位写“1”,将触发一次ADC转换;原创 2024-06-09 11:39:20 · 1286 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第十节 FWDGT-独立看门狗实验
一般来说,搭配MCU的产品都需要有长期运行的需求,特别像一些工业设备,可能要求运行个几年都不关机,但谁也不能保证在这几年里,MCU里面的代码不出任何问题,更何况自然环境中还存在很多电磁干扰、静电等,都可能会导致MCU出现运行异常的情况,比如程序卡死啦,进入错误状态啦等等,这个时候,我们就可以通过一个非常可爱的外设——看门狗,来帮助MCU从异常状态复位,让程序重新开始从头运行。计数器就是按照前面说的,每来一个计数器时钟,计数器减1,而计数器的初始值,来自于重装载寄存器。原创 2024-06-08 10:04:26 · 861 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第九节 RTC-万年历实验
没错,需要复位备份域(控制BKPDRST位)才能重新选择时钟源,但一旦备份域进行了复位,包括RTC_CNT等数据都会丢失,所以在备份域复位前需要对RTC内的各个数据进行保存处理,待备份域复位后再重新写入。除了基础的记时间的功能,RTC还有一个闹钟功能,RTC运行时,当RTC_CNT的值增加到和RTC_ALRM(由RTC 闹钟寄存器高位 (RTC_ALRMH)和RTC 闹钟寄存器低位 (RTC_ALRML)设置)相等时,则会产生ALRM中断,当然,程序中需要实现使能ALARM中断(ALRMIE)。原创 2024-06-07 10:33:58 · 809 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第六节 PMU-低功耗实验
低功耗模式相关数据可参考下表,不同的低功耗模式是通过关闭不同时钟以及电源来实现的,关闭的时钟和电源越多,MCU所进入的睡眠模式将会越深,功耗也会越低,带来的唤醒时间也会越长,其唤醒源也会越少。深度睡眠模式与 Cortex®-M4 的 SLEEPDEEP 模式相对应,在深度睡眠模式下, 1.2V 域中的所有时钟全部关闭, IRC8M、 HXTAL 及 PLLs 也全部被禁用,SRAM 和寄存器中的内容被保留,根据 PMU_CTL 寄存器的 LDOLP 位的配置,可控制 LDO 工作在正常模式或低功耗模式。原创 2024-06-02 10:49:22 · 1031 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第四节 EXTI-按键中断检测实验
EXTI框图如下图所示,极性控制用于控制边沿检测,可实现对外部EXTI信号线进行检测判断,当符合相关极性配置的EXTI信号出现后,将会发出EXTI请求,硬件EXTI请求与内部软件触发信号相或,然后输出给NVIC中断向量控制器产生中断以及输出至唤醒单元进行唤醒,也即是内部软件也可以触发相关请求。EXTI相关触发源如下表所示,所有的GPIO均可以触发EXTI,另外LVD、RTC闹钟、USB唤醒以及以太网唤醒也可以触发EXTI中断或事件,EXTI可用于唤醒深度睡眠模式下的MCU。由聚沃科技原创,来源于。原创 2024-05-31 10:40:06 · 806 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第一节 RCU-时钟配置及输出实验
外部高速晶振电路如下图所示,其中外部高速晶振选择8MHZ,匹配电容选择20pf,该匹配电容可以参考以下公式:C1=C2=2*(Cload-CS),其中Cload为晶体负载电容,Cs为PCB以及MCU引脚的杂散电容,典型值为10pf,因而可以选择负载电容约为20pf的晶振,匹配电容即可选择20pf,需要注意晶振尽量靠近MCU引脚摆放,且晶振引脚走线尽量等长,PCB区域尽量禁空,走线可以包地,另外若走线不等长,匹配电容可以适当选择不同的匹配电容以适配不同的杂散电容。/* 板载UART初始化 */原创 2024-05-28 15:08:01 · 1226 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第八节 TIMER-RGB彩灯实验
本例程中使用的RGB彩灯采用共阳极驱动方式,使用三路PWM进行驱动,对应引脚输出低电平的时候对应RGB灯珠点亮,调节不同路的PWM占空比可以实现多种多样的颜色,每个通道可以输出0%-100%的占空比,组合起来可以输出100*100*100种色彩。其中断回调函数如下,通过该函数定时调整RGB三路PWM的占空比,其中,RGB三路起始占空比分别为0、30%、60%,之后没路每次增加1%,进而实现彩灯呼吸的效果。RGB彩灯的硬件控制电路如下,通过TIMER0_CH0/CH1/CH2三个通道控制RGB灯珠。原创 2024-06-04 10:13:49 · 470 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第七节 TIMER-蜂鸣器PWM
Music_switch的定义如下,该函数在TIMER5的中断中调用,该函数实现的功能主要为配置修改TIMER5的周期以及蜂鸣器PWM输出的周期占空比,进而实现对不同音调的播放。音乐的相关数据定义在music数组中,其参数含义如下:M6代表蜂鸣器PWM的周期,下一个50代表该PWM输出的时间(对应TIEMR5的周期),以上两个数据一组,后面的数据类似。本例程实现通过调整PWM的周期占空比以及对应PWM输出的时间,实现不同音调的蜂鸣器播放,进而实现模拟音乐播放的效果,例程中模拟的是孤勇者的音乐。原创 2024-06-03 11:14:45 · 1165 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第五节 FMC-片内Flash擦写读实验
由该图可知,GD32F303系列MCU可以支持最大3M的Flash空间,前256页为2KB每页,共512KB空间,后面的空间为4KB每页,信息块为存储内部出厂BOOTLOADER,中容量的GD32F303系列产品空间为2KB,大容量的GD32F303系列产品空间为6KB,互联型的GD32F305/307系列产品空间为18KB,主要是由于不同的产品所支持的ISP烧录接口不同,所需要的代码空间也会有差别。有关Flash的相关操作均在gd32f30x_fmc.c中实现,下面介绍下擦除实现的函数,如下表所示。原创 2024-06-01 10:45:30 · 1162 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第三节 GPIO-按键查询检测实验
if(bsp_key_state_get((typdef_bsp_key *)KEY_INIT_GROUP[i])==SET && ((typdef_bsp_key *)KEY_INIT_GROUP[i])->press_cycle_count < 0xffff) //持续60s被按下按键可能损坏。按键初始化函数如下,通过KEY_DEF定义相关按键参数,之后调用bsp_key_init对按键进行分别初始化。//检测任意按键按下时长。原创 2024-05-30 10:38:42 · 910 阅读 · 0 评论 -
【GD32F303红枫派使用手册】第二节 GPIO-流水灯实验
2、输入控制,输入可配置内部上拉或者下拉,内部上下拉电阻均为40K左右,然后通过内部施密特触发器输入到内部,之后可以外设通过备用功能输入或者通过输入状态寄存器读取,施密特触发器的实现功能为输入电压由低到高变化时,低于VIL为低,高于VIH为高,在VIL和VIH之间为低,输入电压由高到低变化时,高于VIH为高,低于VIH为低,在VIL和VIH之间为高,因而为了可靠读取输入电平状态,输入电压高电平需要高于VIH,低电平需要低于VIL才可靠,一般VIL为0.3 VDD,VIH为0.7 VDD;原创 2024-05-29 10:26:33 · 1051 阅读 · 0 评论