CC2530的串口实验
生活随笔
收集整理的這篇文章主要介紹了
CC2530的串口实验
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
CC2530的串口實驗主要有編程主要有一下幾個步驟:
一、串口初始化函數(設置時鐘頻率-->選擇用來當做串口的IO-->設置波特率-->發送中斷設為0)
一、串口初始化函數(設置時鐘頻率-->選擇用來當做串口的IO-->設置波特率-->發送中斷設為0)
二、字符串發送函數(U0DBUF填充字符-->等待串口發送完畢-->發送中斷標志設為0,準備下次發送
代碼1:
/**************************************************************************** * 文 件 名: main.c * 作 者: Andy * 修 訂: 2018-01-08 * 版 本: 1.0 * 描 述: 設置串口調試助手波特率:115200bps 8N1 * 會收到CC2530發過來的:Hello Zigbee ****************************************************************************/ #include <ioCC2530.h> #include <string.h>typedef unsigned char uchar; typedef unsigned int uint; #define TX_SIZE 20#define TX_STRING "Hello Zigbee "char TxData[TX_SIZE]; //存儲發送字符串/**************************************************************************** * 名 稱: DelayMS() * 功 能: 以毫秒為單位延時 16M時約為535,32M時要調整,系統時鐘不修改默認為16M * 入口參數: msec 延時參數,值越大延時越久 * 出口參數: 無 ****************************************************************************/ void DelayMS(uint msec) { uint i,j;for (i=0; i<msec; i++)for (j=0; j<1070; j++); }/**************************************************************************** * 名 稱: InitUart() * 功 能: 串口初始化函數 * 入口參數: 無 * 出口參數: 無 ****************************************************************************/ void InitUart(void) { PERCFG = 0x00; //外設控制寄存器 USART 0的IO位置:0為P0口位置1 P0SEL = 0x0c; //P0_2,P0_3用作串口(外設功能)P2DIR &= ~0XC0; //P0優先作為UART0U0CSR |= 0x80; //設置為UART方式U0GCR |= 11; U0BAUD |= 216; //波特率設為115200UTX0IF = 0; //UART0 TX中斷標志初始置位0 }/**************************************************************************** * 名 稱: UartSendString() * 功 能: 串口發送函數 * 入口參數: Data:發送緩沖區 len:發送長度 * 出口參數: 無 ****************************************************************************/ void UartSendString(char *Data, int len) {uint i;for(i=0; i<len; i++){U0DBUF = *Data++;//將數據填充到串口數據寄存器while(UTX0IF == 0);//等待串口發送完畢UTX0IF = 0; //將串口中斷置為0,準備下一次的發送} }/**************************************************************************** * 程序入口函數 ****************************************************************************/ void main(void) { CLKCONCMD &= ~0x40; //設置系統時鐘源為32MHZ晶振while(CLKCONSTA & 0x40); //等待晶振穩定為32MCLKCONCMD &= ~0x47; //設置系統主時鐘頻率為32MHZ InitUart(); //調置串口相關寄存器memset(TxData, 0, TX_SIZE); //數據清0memcpy(TxData, TX_STRING, sizeof(TX_STRING)); //復制發送字符串到TxDatawhile(1){UartSendString(TxData, sizeof(TX_STRING)); //串口發送數據DelayMS(1000); //延時} }代碼2:
#include <ioCC2530.h> #include <string.h> #define YLED P1_0 #define BLED P1_1 #define LIGHTOPEN 1 #define LIGHTCLOSE 0 #define uint unsigned int #define uchar unsigned char void Delay(uint n); void Init_UsartSend(); void Uart0_Send_String(char *Data,int len); char Txdata[25]="hello world"; /************************** *@ brief 延時函數 **************************/ void Delay(uint n) { uint i; for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); } /************************** *@brief 串口及IO口的初始化函數 **************************/ void Init_UsartSend() { P1DIR |= 0x03; //P1.0和P1.1設置為輸出 YLED = LIGHTOPEN; BLED = LIGHTOPEN; CLKCONCMD &= ~0X40; //設置系統時鐘源為32MHz晶振 while(CLKCONSTA&0X40); //等待晶振穩定 CLKCONCMD &= ~0X47; //設置系統主時鐘頻率為32MHz PERCFG = 0X00; //設置外設控制為P0 P0SEL = 0X3C; //選擇P0.2,P0.3,P0.4,P0.5作為串口 P2DIR &= ~0XC0; //P0優先級作為UART0 U0CSR |= 0X80; //UART方式 U0GCR |= 9; U0BAUD |= 59; //波特率設置為19200 UTX0IF |= 0; //UART0 TX 中斷標志初始置為0 } /************************** * @brief 串口發送函數 * @param Data - 數據指針 len - 數據長度 **************************/ void Uart0_Send_String(char *Data,int len) { uint i; for(i=0;i<len;i++) { U0DBUF = *Data++; //將數據填充到串口數據寄存器 while(UTX0IF==0); //等待串口發送完畢 UTX0IF=0; //將串口中斷置為0,準備下一次的發送 } } /************************ * @brief 主函數 ************************/ main() { uchar i; Init_UsartSend(); Uart0_Send_String(Txdata,25); for(i=0;i<25;i++) { Txdata[i] = ' '; } strcpy(Txdata," 我愛你 "); /*一直使用串口發送數據*/ while(1) { Uart0_Send_String(Txdata,sizeof(" 我愛你 ")); Delay(50000); BLED=!BLED; Delay(50000); Delay(50000); } }總結
以上是生活随笔為你收集整理的CC2530的串口实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IAR中断定义#pragma vecto
- 下一篇: CC2530中常用的控制寄存器