实验要求
代码实现
#include "ioCC2530.h"
#define D3 P1_0
#define D5 P1_3
//系统时钟切换函数
void Set_Clock_32M()
{
CLKCONCMD &=~0x40;
while(CLKCONSTA &0X40)
{
}
CLKCONCMD &=~0x47;
}
//端口初始化函数
void Init_Prot()
{
//配置4个LED灯的引擎
//选择端口的功能
P1SEL &=~0x1B;//设置通用io端口
//配置端口的方向
P1DIR |=0x1B;
//关闭LED灯
P1 &=~0x1B;
}
//串口初始化函数
void Init_Uart0()
{
//1.设置串口的引脚功能,将P0_2和P0_3设置为外设功能
PERCFG &=~0X01;
P0SEL |=0x0C; //0000 1100
//2.设置串口的波特率:32M——9600
U0BAUD = 59;
U0GCR = 8;
//3.设置一个UART控制寄存器 U0UCR
U0UCR |=0x80;
//4.设置控制与状态寄存器 U0CSR
U0CSR |=0xc0; //1100 0000
//5.清除中断标志
//发送
UTX0IF = 0;
//接收
URX0IF = 0;
//6.使能串口数据接收完成中断和总中断
URX0IE = 1;
EA = 1;
}
//串口字节发送函数
void URD_SendByte(unsigned char dat)
{
U0DBUF =dat;
while(UTX0IF==0);
UTX0IF=0;
}
//串口数据接受完成中断服务函数
#pragma vector = URX0_VECTOR //起始语句
//中断服务函数
__interrupt void Service_UR0Recv()
{
D3=1;//收
unsigned char temp;
temp=U0DBUF;
temp++;
D5=1;//发
URD_SendByte(temp);
D3=0;
D5=0;
}
void main(void)
{
Set_Clock_32M();
//端口初始化
Init_Prot();
Init_Uart0();
while(1)
{
}
}
关键字:CC2530 串口 数据收发
引用地址:
CC2530串口数据收发
推荐阅读最新更新时间:2024-11-17 12:22
GD32串口接收异常的几个原因
前面我们介绍过GD32 485发送时出现异常的最常见原因,有小伙伴反馈想要知道GD32 串口接受异常的可能原因,今天我们就来安排。 一、波特率异常导致收发出错 我们知道,串口是异步通讯接口,通讯双方或者多方都需要工作在相同波特率下,如果波特率不对,则发送和接收都会异常。通常引起波特率异常的原因有以下几种: 外部晶振频率设置错误 GD32 固件库中,波特率的运算是需要去获取挂载这个串口的内部总线的频率 而获取总线频率的的函数中需要用到HXTAL_VALUE这个值,即外部晶振的实际频率。 GD32库中这个值默认是8M或25M,而有的小伙伴在用其他频率的晶振时,虽然根据实际频率修改了配置主频的函数,但没将HXTAL_VA
[单片机]
STM32_USART 串口通讯详解
对51单片机有了解的都知道51单片机的串口通讯工作原理,我们单片机使用的电平TTL电平,为了使我们的的单片机与PC进行通信,就需要一个电平转换芯片,把TTL电平转换为USB电平(使用的USB接口,如果使用的DB9接口,电平转换芯片则为TTL转RS232电平芯片),然后通过对SBUF寄存器的读写操作来实现PC与MCU的通信。STM32的串口通讯原理与51相同。下面就对USART尽行具体的介绍。 USART(Universal synchronous asynchronous receivertransmitter )通用同步异步收发器,是STM32上基于串口通讯协议来实现与外部通信的一个外设,因为串口通讯协议的简单,便捷,所以在
[单片机]
12M晶振下,STM32串口波特率设置问题
使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的努力,下面我们就通过简单的三个步骤就可以让你随意的使用4—16MHz之内任何频点的晶振,我们以STM32F10x_StdPeriph_Lib_V3.4.0为例说明。 第一步,打开stm32f10x.h,将 #define HSE_VALUE ((uint32_t)8000000) 修改为: #define HSE_VALUE ((uint32_t)12000000) 第二步,打开system_stm32f10x.c,
[单片机]
STM32 DMA详解——一串口为例
一. DMA原理: DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量 中断 负载。否则,CPU 需要从 来源 把每一片段的资料复制到 暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。 DMA 传输将数据从一个地址空间复制到另外一个地址空间。当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。 二.STM32使用DMA 1
[单片机]
MSP430设置串口波特率的方法
给定一个BRCLK时钟源,波特率用来决定需要分频的因子N: N = fBRCLK/Baudrate 分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接近N。 如果N等于或大于16,可以设置UCOS16选择oversampling baud Rate模式 注:Round():指四舍五入。 Low-Frequency Baud Rate Mode Setting 在low-frequency mode,整数部分的因子可以由预分频实现: UCBRx = INT(N) 小数部分的因子可以用下列标称公式通过调制器实现: UCBRSx = round( ( N – INT(N) ) × 8 )
[单片机]
STM32学习笔记(串口、IAP)
串口: 一. USART_ITConfig(USART1, USART_IT_TXE, ENABLE): 只要发送寄存器为空,就会一直有中断,因此,要是不发送数据时,把发送中断关闭,只在开始发送时,才打开。 二. 以下是字符发送的配置过程,注意第6点,在设置USART_CR1中的TE位时,会发送一个空闲帧作为第一次数据发送,所以即便你执行了USART_ClearFlag(USART1, USART_FLAG_TC); (这个函数肯定在空闲帧数据发送完成前执行),所以当空闲帧发送完后,就进入发送完成中断。 配置步骤: 1. 通过在USART_CR1寄存器上置位UE位来激活USART 2. 编程USART_CR1的M位来定义
[单片机]
STM32F103利用定时器2与串口接收指令控制LED亮度
通过串口接收到的数据改变PA8输出的占空比来控制LED小灯的亮度 主函数 char *str_light = LIGHT: ; unsigned char PWM_BUF = 0; int main(void) { PWM_Init(); USART3_TIM2_Init(115200); delay_init(); while(1) { if(RX_SATA == 1) { if(strstr(RX_BUF,str_light) != 0) { delay_ms(1); PWM_BUF =(RX_BUF -0x30)*10+(RX_BUF -0x30); TIM_SetC
[单片机]
Segment BANKED_CODE must be defined in a segment definition option (-Z, -b or -P)
是链接(Link)时出错: Fatal Error : Segment BANKED_CODE must be defined in a segment definition option (-Z, -b or -P) 原因是IAR新版本使用旧版本文件 解决方法: 打开project- options- linker- config- override default 选择文件C:Program Files (x86)IAR SystemsEmbedded Workbench 6.0 Evaluation8051configdevicesTexas Instrumentslnk51ew_cc2530F256_banked.xcl
[单片机]