发新帖本帖赏金 100.00元(功能说明)我要提问
返回列表
[CW32F030系列]

CW32F030CxTx StartKit测评

[复制链接]
1100|6
手机看帖
扫描二维码
随时随地手机跟帖
终散的不醒梦|  楼主 | 2022-7-25 16:16 | 显示全部楼层 |阅读模式
CW32F030CxTx StartKit评测
认识CW32F030CxTx StartKit
1、CW32F030C8T6是一款以ARM Cortex-M0+为内核的微处理器,最高主频为64MHz,采用LQFP48封装,64K字节FLASH,8K字节RAM。
2、板载3颗LED灯,分别为:用户指示灯LED1、LED2以及电源指示灯LED3。
3、板载3个轻触开关,分别为:用户轻触开关S1、S2以及系统复位轻触开关S3。
4、板载USB转串口芯片(CH340N),用户可直接使用串口通讯。
5、板载FLASH芯片(W25Q64JVSSIQ),可实现SPI通讯。
6、板载EEPROM芯片(CW24C02AD),可实现IIC通讯。
7、板载接口包括:1、Mini USB接口;2、下载器调试接口;3、GPIO全部引出。
8、多种供电方式:1、USB VBUS供电;2、3.3V供电(LD1117AS33TR);3、外接1.65V~5.5V供电。-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
入门指南
按照下列步骤配置CW32F030CxTx StartKit:
1、确认跳线帽的位置,如下表所示。2、确保调试接口与开发板正确连接。3、给评估板上电,使用USB连接至CN1。4、红色LED3电亮(系统电源指示灯),绿色LED1和LED2交替闪烁。5、按下S1按键,可观察到LED1闪烁,LED2熄灭。6、按下S2按键,客观擦到LED2闪烁,LED1熄灭。

跳帽
定义
位置
功能
J24[1-2]
VDDLDO
ON
使用VDDLDO降压后的电源给系统供电
J23
  ON
短接不进行系统电流测量
J22
  ON
短接不进行系统电流测量
J21
  ON
短接不进行系统电流测量
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
原理图详解
POWER:
首先我们得了解一下该芯片的供电电压范围,通过看数据手册可知,CW32F030C8T6的供电电压范围为:1.65V至5.5V,是一个宽电压供电芯片,因此我们可以通过5V直接供电,或者再经给LDO降压成3.3V再供电都可以,因此我们来看看官方Demo板是如何进行供电的。
7ddf9b560fe25a6f106e729dca3611c7
可以从原理图看到的是:系统供电的方式有三种:1、DCIN,也就是外部输入1.65V至5.5V区间范围内的电压进行供电;2、VDDUSB,也就是使用Mini USB进行供电,此时供电电压为+5V;3、VDDLDO,也就是将Mini USB输入的+5V电压经过LDO降压成+3.3V后再为系统供电,此时供电电压为+3.3V.实物硬件电路图如下所示。
58758d41f3d703ed4290361cd66bce1a
开发板默认情况下采用VDDLDO供电,也就是系统供电电压为+3.3V,与此同时,系统跳帽J23、J21、J22均已连接。可通过测试针T3和T5进行电压检测。
在保持默认情况下时,系统电压*VDDIN为+3.3V、VDD为+3.3V、VDDA为+3.3V。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
滤波
f770a39b766938fd404e31ca9951a0e3
C1-C2-C3-C4是给VDD芯片电压滤波,C9是给VDDA数字电源滤波;
C10-C11-C12-C15分别是给PB0-PA0-PA5-PB11滤波的,如果需要用到则使用0Ω电阻焊接JP9-JP10-JP11-JP12即可。
值得说明的是:
在进行ADC采样时,可将JP9、JP10、JP11、JP12电阻位焊接0Ω电阻,可对采样信号进行滤波。​在使用GPIO其他功能时,需断开JP9、JP10、JP11、JP12连接的0Ω电阻。
硬件实物图如下
817f9e0d965846983cf12042976c851f
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MCU
817f9e0d965846983cf12042976c851f
所有IO均使用排针引出。
晶振部分的有关说明:CW32F030CxTx StartKit 评估板已焊接16MHz 高速晶振与 32.768KHz 低速晶振。默认连接至 GPIO,下表介绍了使用不同的电阻焊接方式进行晶振接口与普通 GPIO 的切换。

电阻JPx焊接方式
功能
电阻JP2 JP3 ON,JP1 JP4 OFF
PC14 PC15连接低速晶振
电阻JP2 JP3 OFF,JP1 JP4 ON
PC14 PC15作用普通GPIO
电阻JP6 JP7 ON,JP5 JP8 OFF
PF00 PF01连接高速晶振
电阻JP6 JP7 OFF,JP5 JP8 ON
PF00 PF01作为普通GPIO
硬件实物电路图如下所示:
817f9e0d965846983cf12042976c851f
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FLASH_AND_EEPROM
a262866816169ba2059ae23fa09fc49d
值得注意的是:W25Q64JVSSIQ以及CW24C02AD分别连接至排针口CN10和CN11,用户可通过排针将该引脚连接至所需的IO口。
1、CW32F030CxTxStartKit评估板已焊接W25Q64JVSSIQFLASH芯片,用户可使用CN10排针配置W25Q64工作电压,SPI_NCS引脚,SPI_MISO引脚,SPI_MOSI引脚,SPI_SCK引脚。2、CW32F030CxTxStartKit评估板已焊接CW24C02ADEEPROM芯片,用户可使用CN11排针配置CW24C02AD工作电压,SDA引脚,SCL引脚。
硬件实物电路图如下所示:
1282a564f3e382cd5439dfb854a156bf
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DBG&PROGRAMMER
06559f44e878269207f5887f6ba6e800
也就是下载调试端口,硬件实物电路图如下所示:
dda8160264f8e76adab37b1534e5d22b
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
USB_TO_UART
8bc4c4ffa596559df77e86981def807f
该开发板板载了CH340N,也就是意味着我们只需要插入Mini USB即可实现电脑和开发板的数据通讯功能。
CW32F030CxTx StartKit 评估板已焊接 CH340N USB 转串口芯片,用户可使用 CN9 排针配置 CH340N工作电压,串口发送引脚连接 I/O,串口接收引脚连接 I/O。
下表介绍了 CH340N 为 3.3V 或 5V 工作电压时 (CN9 VDDU 连接不同的电源 ),J5 的连接方式。

CH340N工作电压
J5连接
3.3V
J5[2-3],跳帽J5的2、3脚相连接
5V
J5[1-2],跳帽J5的1、2脚相连接
默认状态下,我们将VDDU与VDD相连接,即系统电压VDDU为3.3V,因此默认状态下J5的引脚2-3应该相连接。
硬件实物电路图如下所示:
8bc4c4ffa596559df77e86981def807f
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
KEY_AND_LED
77a757f3826bb8850836618d929ccf7c
常用的按键功能,即按键S1(PA1)、按键S2(PA2)。
常用的两颗LED,即LED1(PB9)、LED2(PB8)。
硬件电路实物图如下所示:
26ad8aa6747b188881d0deec8208598c
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
排针接口
e3405a25efffb4f71a23f4f0051f9c43
将MCU的所有IO口全部引出,硬件实物电路图如下所示。
4c85397a0c25e22a7587f05a0e0cdee7
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.新建工程
第一步:新建文件夹
891a479e6bb6145d8881a5e8d09351e1
第二步:打开keil文件,新建工程并添加.c和.h文件
26b5e18adde038379899bfc6c80fc813
第三步:编译工程,发现报错,如下所示
f7bfd2e8cd59ac7d12809fb7466501a5
仔细阅读,可以看到这个问题是关于找不到内核M0加头文件。
第四步:解决问题,添加内核文件。
a31ba5e7fa4d864d51d476c7e3546876
再次编译工程文件!
66e13fc61b434ebf84bbc63709afe1db
以上就将一个基本框架建立好了,接下来就是补充MyApplication中的内容。
66e13fc61b434ebf84bbc63709afe1db
最后一步就是在main.c文件中进行调用即可。
8c5b26af5ac9f86f16ea688dcd690aab
以上就完成了全部所有的新建工程文件内容!
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.晶振波形
在开始撰写代码前,我们先将晶振的波形进行一个简单的测试输出。而在测试晶振波形之前,我们需要了解以下CW32F030C8T6的时钟知识。
时钟树
3c54da6a7dc1d08a5f422a57cfb7b9d5
从图中可以看到,系统时钟SYSCLK有5个时钟源:
1:外部高速振荡器时钟(HSE)2:外部低速振荡器时钟 (LSE)3:HSI时钟,由内部高速RC振荡器时钟(HSIOSC)经过分频产生4:内部低速RC振荡器时钟(LSI)5:PLL锁相环时钟,由HSE时钟或HSI时钟经锁相环PLL倍频(2~12倍)产生
与此同时我们可以发现:判断晶振是否正常运行,我们可以通过相应的时钟输出引脚,然后连接示波器进行波形频率勘测。
RCC_HCLK_OUT();//输出HCLK时钟,通过引脚PA4进行观测
RCC_PCLK_OUT();//输出HCLK时钟,通过引脚PA3进行观测
RCC_HSE_OUT();//输出HCLK时钟,通过引脚PB2进行观测
RCC_HSI_OUT();//输出HCLK时钟,通过引脚PB0进行观测
RCC_LSE_OUT();//输出HCLK时钟,通过引脚PB12进行观测
RCC_LSI_OUT();//输出HCLK时钟,通过引脚PB11进行观测
RCC_PLL_OUT();//输出HCLK时钟,通过引脚PC13进行观测
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HSI
这里我们使用内部高速时钟进行波形测试,方便后期正常运行程序。
仅需调用如下函数,并使用示波器监测PA4、PA3、PB0、PC13引脚的输出,可观测程序是否正常启动。
voidRCC_Configuration(void)
{
//第一步 HIS使能并校验
RCC_HSI_Enable(RCC_HSIOSC_DIV6);//48/6=8MHz
//第二步设置HCLK PCLK的分频系数
RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
RCC_PCLKPRS_Config(RCC_PCLK_DIV1);
//第三步使能PLL 并设置PLL倍频到64M
RCC_PLL_Enable(RCC_PLLSOURCE_HSI,8000000,8);//8*8=64MHz
//第四步输出波形进行波形检测
RCC_HCLK_OUT();//输出HCLK时钟,通过引脚PA4进行观测
RCC_PCLK_OUT();//输出HCLK时钟,通过引脚PA3进行观测
RCC_HSE_OUT();//输出HCLK时钟,通过引脚PB2进行观测
RCC_HSI_OUT();//输出HCLK时钟,通过引脚PB0进行观测
RCC_LSE_OUT();//输出HCLK时钟,通过引脚PB12进行观测
RCC_LSI_OUT();//输出HCLK时钟,通过引脚PB11进行观测
RCC_PLL_OUT();//输出HCLK时钟,通过引脚PC13进行观测
//第五步当使用的时钟源HCLK大于24M 小于等于48MHz时,设置FLASH读等待周期为2 cycle//当使用的时钟源HCLK大于48M,设置FLASH读等待周期为3 cycle
__RCC_FLASH_CLK_ENABLE();
FLASH_SetLatency(FLASH_Latency_3);
//第六步时钟切换的PLL
RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL);
RCC_SystemCoreClockUpdate(64000000);}
相应的实验波形如下所示:
HCLK和PCLK的波形:
cd9a444b3b3210466c0f15c9c56cc300
HSE和HSI波形:
97fae3ebdb863c6bfc2acd06e32f8f07
PLL波形:
0221006443bd236ea37ab2c0535fc55e
我们可以发现,跟我们配置的一样,只开启了HSI时钟,且使用锁相环进行倍频。调用以上函数,即可让程序工作在内部高速时钟晶振的基础上。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HSE
这里我们使用外部高速时钟进行波形测试,方便后期正常运行程序。
仅需调用如下函数,并使用示波器监测PA4、PA3、PB2、PC13引脚的输出,可观测程序是否正常启动。
voidRCC_Configuration(void)
{
//第一步 HSE使能并校验外部晶振为16MHz
RCC_HSE_Enable(RCC_HSE_MODE_OSC,16000000,RCC_HSE_DRIVER_NORMAL,RCC_HSE_FLT_CLOSE);
//第二步设置HCLK PCLK的分频系数
RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
RCC_PCLKPRS_Config(RCC_PCLK_DIV1);
//第三步使能PLL 并设置PLL倍频到64M
RCC_PLL_Enable(RCC_PLLSOURCE_HSECLK,16000000,4);//16*4=64MHz
//第四步输出波形进行波形检测
RCC_HCLK_OUT();//输出HCLK时钟,通过引脚PA4进行观测
RCC_PCLK_OUT();//输出HCLK时钟,通过引脚PA3进行观测
RCC_HSE_OUT();//输出HCLK时钟,通过引脚PB2进行观测
RCC_HSI_OUT();//输出HCLK时钟,通过引脚PB0进行观测
RCC_LSE_OUT();//输出HCLK时钟,通过引脚PB12进行观测
RCC_LSI_OUT();//输出HCLK时钟,通过引脚PB11进行观测
RCC_PLL_OUT();//输出HCLK时钟,通过引脚PC13进行观测
//第五步当使用的时钟源HCLK大于24M 小于等于48MHz时,设置FLASH读等待周期为2 cycle//当使用的时钟源HCLK大于48M,设置FLASH读等待周期为3 cycle
__RCC_FLASH_CLK_ENABLE();
FLASH_SetLatency(FLASH_Latency_3);
//第六步时钟切换的PLL
RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL);
RCC_SystemCoreClockUpdate(64000000);}
相应的实验波形如下所示:
HCLK和PCLK的波形:
75e7c79bd77dd0507a5af842003e2da2
HSE和PLL波形:
c00cf50433a26bfb89c1afe21fe46ed4
我们可以发现,跟我们配置的一样,只开启了HSE时钟,且使用锁相环进行倍频。调用以上函数,即可让程序工作在外部高速时钟晶振的基础上。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.点亮LED
实物硬件图如下所示:我们点亮板载的两颗LED灯,使用外部高速晶振!
3cbf72539f48f3b433caa8392ddb74aa
可以发现的是:该LED属于高电平点亮、低电平熄灭的状态。
因此本例程使用:状态机,对于2个LED进行编程。与此同时,调用系统自带的系统滴答定时器函数做精准的ms延时函数。
/*1.LED1 ON   LED2 OFF   延时1S2.LED1 OFF   LED2 ON     延时1S3.LED1 OFF   LED2 OFF   延时1S4.LED1 ON   LED2 ON     延时1S*/
分为4种状态!
为验证系统滴答定时器的ms延时函数是否精准,本项目还做了一个基本的LED闪烁功能(1S点亮、1S熄灭),并通过示波器检测其输出引脚的波形,如下所示。
我们会发现其总时长就是2s,因此验证了理论的正确性;
将代码撰写完毕后,烧写进入,实验显示如下所示:
2e8c9cb1e8572ab1945ddb7336fe2e88
2e8c9cb1e8572ab1945ddb7336fe2e88
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4.蜂鸣器
此处作为作业布置给各位,考察各位的GPIO输出是否掌握!
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5.按键检测
首先看看电路板载的两个用户按键的原理图:
7f8c52a8444d35625badc2ba11472317
我们可以发现的是:按键在未按下的时候,处于高电平状态;案件在按下的时候,处于低电平状态。
本例程就是使用GPIO的输入读取,检测按键1和按键2的状态,进而控制LED灯;
1、如果按键1按下,LED1翻转;2、如果按键2按下,LED2翻转
实验中遇到了一个问题:就是我按下按键,示波器感受到了明显变化,但是就是LED没有翻转;
原因:我忘记在进入KEY1_DOWN函数时修改系统的按键状态了,这样的话,它默认一直就是KEY1_DOWN状态了,接下来怎么按,都不行,因此需要在最后更改状态成默认的KEY_UP即可。
接下来就是我瞎按的实验波形,哈哈,看看就行,具体自己下入开发板进行观测实验现象就好。
f6554020970a2d21097657df4a2dbae1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6.中断检测
硬件原理图仍保持不变,就是两颗按键。
7f8c52a8444d35625badc2ba11472317
跟前面不同的是,我们本次需要做的是利用外部中断点亮两颗LED灯。
首先我们先认识一下什么是外部中断。
ebf2218b0247e6d0dbf709531370860c
值得注意的几个小点:
1、由于部分外设的中断复用一个 IRQ 中断源,用户在中断服务程序中应先检查中断标志位,以确定产生中断的外设。2、HSE 、LSE 时钟信号起振失败和 LSI、LSE、HSIOSC、HSE、PLL 时钟信号稳定对应 RCC 全局中断。3、HSE 或 LSE 时钟信号在运行中失效对应 FAULT 中断
8d24f1b68e3cee502b16a573ad503a7a
编程思路:
1、配置GPIO引脚为中断引脚。2、清除该引脚的中断标志位。3、使能该引脚的中断。4、进入中断函数。5、中断函数中清楚标志位。6、实现相应功能。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
7.串口通讯
首先我们看看硬件电路图:
dca1fa8738581a835b6b1ad3f5b1a21a
VDDU如果通过杜邦线连接到了5V供电,那么跳帽应该保持J5的引脚1-2相连。
VDDU如果通过杜邦线连接到了3.3V供电,那么跳帽应该保持J5的引脚2-3相连。
如果你开发电路时,不知道那个是J5的1-2-3引脚的话,我这有一种方法推荐给你:
你随意用跳帽连接两个引脚,然后去测量C19两端的电压!1、如果你连接了J5的1-2引脚,那么C19两端的电压应该是3.3V。2、如果你连接了J5的2-3引脚,那么C19两端的电压应该是0V.
具体的硬件排布如下图所示:
c2469d162af04017d92dadf7f4fc6ced
注意的是:VDDU在开发之前一定要连接到你想连接的电压!!!不然CH340N没有供电,则无法工作!!!
最后就是找到UART1的发送和接收引脚了,如下图所示,我这里拿这一组引脚进行测试。
13c1100f0b56a4ed77bef1d59a4d0ed4
OK,在硬件电路图完毕后,我们就可以撰写代码了,主要就是实现能够用printf打印即可,其他可自行添加内容。
6003830cd387ccabcaf0866bf820af3b
课堂穿插之4×4矩阵键盘
代码很简单,就是采用变行读列的方法。实验现象如下所示:
8b291eb95a0c83ec7ebde3570b21a70e
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
8.基本定时器
CW32F030 内部集成 3 个基本定时器 (BTIM),每个 BTIM 完全独立且功能完全相同,各包含一个 16bit 自动重装载计数器并由一个可编程预分频器驱动。BTIM支持定时器模式、计数器模式、触发启动模式和门控模式 4 种工作模式,支持溢出事件触发中断请求和 DMA 请求。得益于对触发信号的精细处理设计,使得 BTIM 可以由硬件自动执行触发信号的滤波操作,还能令触发事件产生中断和 DMA 请求。
2d881a72856dfe84a31a74cac96754d2
本例程实现一个LED的闪烁功能,时间是500ms闪烁一次;
static void BTIM_Init(uint16_t Period,uint16_t Prescaler)
{
BTIM_TimeBaseInitTypeDefBTIM_TimeBaseInitStructure = {0};
__RCC_BTIM_CLK_ENABLE();
__disable_irq();
NVIC_EnableIRQ(BTIM1_IRQn);
__enable_irq();
BTIM_TimeBaseInitStructure.BTIM_Mode = BTIM_Mode_TIMER;
BTIM_TimeBaseInitStructure.BTIM_OPMode = BTIM_OPMode_Repetitive;
BTIM_TimeBaseInitStructure.BTIM_Period = Period;BTIM_TimeBaseInitStructure.BTIM_Prescaler = Prescaler;
BTIM_TimeBaseInit(BTIMX,&BTIM_TimeBaseInitStructure);
BTIM_ITConfig(BTIMX,BTIM_IT_OV,ENABLE);
BTIM_Cmd(BTIMX,ENABLE);
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
9.通用定时器
CW32F030 内部集成 4 个通用定时器 (GTIM),每个 GTIM 完全独立且功能完全相同,各包含一个 16bit 自动重装载计数器并由一个可编程预分频器驱动。GTIM 支持定时器模式、计数器模式、触发启动模式和门控模式 4 种基本工作模式,每组带 4 路独立的捕获 / 比较通道,可以测量输入信号的脉冲宽度(输入捕获)或者产生输出波形(输出比较和 PWM)。
9531b9e8b5f0222900ef2f72c898ec8e
利用通用定时器我们可以做输出PWM、基本延时等功能!我这里就抛砖引玉以下,点个灯吧。输出PWM就留给高级定时器做吧。
本例程实现一个LED的闪烁功能,时间是1s闪烁一次;
static void GTIM_Init(uint16_t Period,uint16_t Prescaler)
{
GTIM_InitTypeDefGTIM_InitStructure = {0};
__RCC_GTIM1_CLK_ENABLE();
__disable_irq();
NVIC_EnableIRQ(GTIM1_IRQn);
__enable_irq();
GTIM_InitStructure.Mode = GTIM_MODE_TIME;
GTIM_InitStructure.OneShotMode = GTIM_COUNT_CONTINUE;
GTIM_InitStructure.Prescaler = Prescaler;
GTIM_InitStructure.ReloadValue = Period;
GTIM_InitStructure.ToggleOutState = DISABLE;
GTIM_TimeBaseInit(GTIMX,>IM_InitStructure);
GTIM_ITConfig(GTIMX,GTIM_IT_OV,ENABLE);
GTIM_Cmd(GTIMX,ENABLE);
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10.高级定时器
高级定时器 (ATIM) 由一个 16 位的自动重载计数器和 7 个比较单元组成,并由一个可编程的预分频器驱动。ATIM 支持 6 个独立的捕获 / 比较通道,可实现 6 路独立 PWM 输出或 3 对互补 PWM 输出或对 6 路输入进行捕获。可用于基本的定时 / 计数、测量输入信号的脉冲宽度和周期、产生输出波形(PWM、单脉冲、插入死区时间的互补 PWM 等)。
7bd0928502a8996e15e19ae3cc705218
既然谈到了高级定时器,那肯定少不了输出PWM了。那我这里就只做个PWM的三路互补输出吧。
通道1我们设置了占空比是50%,通道2是25%。可以看看如下实验现象,就可以看到我们的代码完全没问题
0b742f98499c8aff59b77fc4678a7d3f
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
11.IIC
CW32F030 内部集成 2 个 I2C 控制器,能按照设定的传输速率(标准,快速,高速)将需要发送的数据按照 I2C 规范串行发送到 I2C 总线上,并对通信过程中的状态进行检测,另外还支持多主机通信中的总线冲突和仲裁处理。
b0ee2f8f98522ae87fca23bbbd63d420
原理部分内容,我就不赘述太多,主要是通讯的逻辑性问题。
我这里使用两个方法:1、软件IIC;2、硬件IIC。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
11.1 软件IIC
通过GPIO模拟IIC通讯逻辑,进而驱动OLED 0.96寸屏!
我们随便找一个IIC引脚即可,如下图所示。
c879fb650e84b6b7732139ba46809841
因此我这里就选用PB6和PC7作为IIC引脚模拟口吧,其他引脚一样!
具体实现看代码,我这里就展示一下最终的实验现象图。
显示文字:芯源。然后数字累加255,再重新加!
10321555927ba8be22973917f515d3ec
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
11.2 硬件IIC
使用硬件IIC驱动OLED!
b62bf93cce59ff86a592b2fe6d59d3cc
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
12.SPI
串行外设接口(SPI)是一种同步串行数据通信接口,常用于 MCU 与外部设备之间进行同步串行通信。 CW32F030 内部集成 2 个串行外设 SPI 接口,支持双向全双工、单线半双工和单工通信模式,可配置 MCU 作为主机或从机,支持多主机通信模式,支持直接内存访问(DMA)。
本例程主要采用SPI软件模拟的方式驱动LCD19264,原理部分也没什么好多说的,基本上也没多少,直接阅读代码即可。
前几天看到群里有个朋友说:他的外设是5V供电,他不知道怎么板了。其实方法特别多,我就只说一种吧,最简单的一种,那就是直接把CN24的VDDUSB的引脚通过排针引出来即可!如下图所示
1e101e9ddc017185ce14867e09fd8bd2
我这里文档就只展示以下实验现象图吧,具体不懂的细节,可以在评论区与我讨论,嘿嘿。
先展示数值206,寓意:爱你哟!然后1S后,显示一个图片----随便找的图片,你们喜欢什么图片可以通过取模的方式把图片弄上去就好~很简单的哦。不懂的再跟我沟通交流哈!
4663a34a3c70752f2e420dafe2352b16
7fb809b3c55c688a3a7990e451f0f8ff
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
13.ADC
CW32F030 内部集成一个 12 位精度、最高 1M SPS 转换速度的逐次逼近型模数转换器 (SAR ADC),最多可将 16 路模拟信号转换为数字信号。现实世界中的绝大多数信号都是模拟量,如光、电、声、图像信号等,都要由 ADC 转换成数字信号,才能由 MCU 进行数字化处理。
3f5c7be090349ba0479337f39316a183 我这里就采用单路ADC读取滑动变阻器的读值并通过串口打印出来吧。算是一个ADC的一个基本例程提供给各位进行参考学习。
首先是看串口,你扭动旋钮,读值会变化。
a2469c3a2eabe72cb5bdeb8f82dbb022
最后再看看示波器,也会变化,因为我是静图,我这里就显示三个图,0V-中间电压-3.3V。剩下的你们可以自己去下载程序后观看.
d1b85493d9456450c4acdbc137361a37
b6d8fb25a6cb1aba4250ef119e8c4220
40921e92cbc8a4a8408413b587a35beb
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
14.测试总结
我分别测评了:
1、如何新建工程。
2、如何配置系统时钟?如何查看系统波形是否正确?代码很详细,分别采用了常用了二种模式:内部高速时钟和外部高速时钟。并通过示波器展示了配置是否正确!相信你可以自己实际学会哦。
3、基本的嵌入式入门----点亮LED。其实就是学习GPIO输出功能。不同的是,我使用的状态机编程的逻辑,利用指针调取函数实现所谓的点灯功能!
4、蜂鸣器部分,我没有写出来,因为我觉得,LED都点亮了,我相信你肯定自己能实现这个蜂鸣器的功能!!!交给你的作业,记得完成哦。嘿嘿
5、按键检测,也就是学习GPIO输入功能。此处采用循环扫描的方法实现函数功能,并加入了软件去抖功能。
6、中断,也就是学习NVIC功能。按键按下->产生中断->进入中断服务函数->实现相应功能!
7、串口通讯,也就是学习USART功能。分别讲述了如何找到GPIO引脚,如何配置引脚,如何对硬件原理图的连接进行操作等规范细节问题,通过例程可以实现数据的收发功能!
8、插入了课堂小细节,那就是把以前的几个内容:GPIO输出、GPIO输入、按键检测、串口通讯,融合在一起,实现一个矩阵键盘的检测功能。
9、基本定时器,即BTIM。通过配置基本定时器的时基结构体,产生更新中断,从而精准延时闪烁LED。
10、通用定时器,即GTIM。通过配置通用定时器的时基结构体,产生更新中断,从而精准延时闪烁LED。
11、高级定时器,即ATIM。通过配置输出PWM,高端引脚产生不同占空比的PWM信号;低端引脚通过GPIO进行控制高低电平;为无刷直流电机的驱动做下坚实的基础!
12、IIC,分别实现了软件模拟IIC和硬件IIC功能。驱动OLED显示屏,显示指定内容。
13、SPI,通过GPIO模拟SPI通讯逻辑,实现驱动OLED19264显示屏的功能。也可以采用硬件SPI,官方给了引脚SPI的例程,所以我这里就没再做了,交给你的作业,记得完成哦。嘿嘿。
14、ADC,通过模数转换器将读取到的滑动变阻器的值,通过串口打印出来。

所有配套文件包括 原理图+固件库+代码程序+说明文档! 全部都保存在了网盘当中!有需要的小伙伴可以直接下载哦
链接:https://pan.baidu.com/s/180n_hvo8kS971ZaraWYyMA
提取码:4y1q

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上几乎涵盖了最基本的例程代码,我的评测就到此结束啦。后期有时间再与各位进行交流学习,目前有点忙,可能暂时评测就到此结束啦。
江湖如此之大,各位,再会!!!
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

使用特权

评论回复

打赏榜单

21ic小管家 打赏了 100.00 元 2022-08-10
理由:优质内容

终散的不醒梦|  楼主 | 2022-8-1 14:12 | 显示全部楼层
所有配套文件包括 原理图+固件库+代码程序+说明文档! 全部都包含在了配套的文档中!有需要的小伙伴可以直接下载哦

使用特权

评论回复
巧克力娃娃| | 2022-8-9 11:46 | 显示全部楼层

使用特权

评论回复
yangxiaor520| | 2022-8-11 08:12 | 显示全部楼层
写的很详细,帮顶一下。

使用特权

评论回复
jt123456| | 2022-8-11 11:08 | 显示全部楼层
写的很详细,顶顶顶顶。

使用特权

评论回复
329547875| | 2024-3-7 16:14 | 显示全部楼层
链接失效了,能再分享不

使用特权

评论回复
szt1993| | 2024-3-25 15:42 | 显示全部楼层
楼主这个文章还是非常详细的

使用特权

评论回复
发新帖 本帖赏金 100.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

10

帖子

1

粉丝