1,前言
CC2530和STM32是不同类型的单片机,其二者的区别主要如下,目前我主要想实现组网功能,然后将STM32与CC2530结合起来使用,利用CC2530的无线通讯与组网优势,结合STM32的灵活性,开发一套产品,下面就开启我的CC2530自学之路。
STM32:
是一款广泛使用的微控制器,适用于多种应用场景。
需要额外的无线通信模块才能实现组网功能,灵活性高,可以支持多种通信协议(如Wi-Fi、蓝牙等)。
CC2530:
是专门用于无线通信的芯片,支持Zigbee协议。
内置无线功能,适合构建低功耗、低数据速率的无线传感器网络。
2,点个灯吧
不管学什么系列的单片机,都首先是点灯,作为点灯大师,先用CC2530点个灯吧。针对嵌入式系统来说,软件与硬件都是紧密联系的,我个人认为在学一个历程之前,首先要有自己的思路和目标,按照之前我做STM32单片机的经验来说,学习思路可以分为先硬件后软件,最后再debug的思路去做。
2.1 硬件电路
首先观察LED灯部分的电路图,其电路图如下:
根据电路图,可以发现,当P1_0和P1_1电平为高电平时,电路不导通,灯灭,电平为低电平时,电路导通,灯亮。这也就给了我们软件程序的思路,无非就是控制P1_0和P1_1等引脚输出高电平与低电平而已。
2.2 寄存器选择
如果我们想要控制P1_0等引脚,我们需要知道该端口所在的寄存器,针对寄存器进行处理,本例程中,使用的寄存器为P1SEL和P1DIR两个,具体如何使用,这时候就用到CC2530的数据手册了,内容如下:
P1SEL是端口1的功能选择,针对本例程来说,我们选择通用I/O功能,至于通用IO与外设功能的区别,如下:
· 通用 I/O 功能:
- 引脚作为普通的输入或输出使用。
- 主要用于控制或读取引脚电平。
· 外设功能:
- 引脚用于外设的特定功能,如串口、定时器、SPI 等。
- P1SEL 寄存器的相应位设置为 1 时,引脚配置为外设功能。
P1DIR是端口1的方向选择,即确定输入还是输出,故针对本例程,设置程序如下:
关于|=与=的区别
· 0x13:这是十六进制数,表示二进制的 00010011。
· |= 运算:
- 当前 P1DIR 的值与 0x13 进行按位或运算。
- 只有 0x13 中为 1 的位(第 0、1、4 位)会将 P1DIR 中对应位设置为 1,其他位保持不变。
针对本例程
- 如果 P1DIR 原来值是 00000000,执行后变为 00010011。
= 与 |= 的区别:
- =:直接赋值,将右侧的值赋给左侧变量。例如,P1DIR = 0x13; 会将 P1DIR 的所有位设置为 00010011,覆盖原有值。
- |=:按位或赋值,将左侧变量与右侧值进行按位或运算后再赋值,仅更改特定位,而不影响其他位。例如,P1DIR |= 0x13; 只修改 0x13 中为 1 的位,其他位保持不变。
至此,完成了端口1的寄存器配置,然后接下来就是主程序中的调用,该程序中主要使用的是翻转实现GPIO的高低输出切换。
void main(void)
{
InitIO(); //初始化LED灯控制IO口
while(1) //死循环
{
LED1 = !LED1; // LED1灯闪一次
Delay(10000);
LED2 = !LED2; // LED2灯闪一次
Delay(10000);
LED3 = !LED3; // LED3灯闪一次
Delay(10000);
}
}