STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx

上传人:b****4 文档编号:16412508 上传时间:2022-11-23 格式:DOCX 页数:19 大小:19.54KB
下载 相关 举报
STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx_第1页
第1页 / 共19页
STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx_第2页
第2页 / 共19页
STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx_第3页
第3页 / 共19页
STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx_第4页
第4页 / 共19页
STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx

《STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx》由会员分享,可在线阅读,更多相关《STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

STM8L101F3P6单片机IO模拟收发调试Word文档格式.docx

STA_MARK_TX)

{

LED02=1;

Delay(0xfffFf);

LED02=0;

Delay(0xffFff);

}

else

ifnnrf_CLERN_ALL();

Delay(0xffFf);

LED02=0;

}

ifnnrf_rx_mode();

IRQ_OUT;

Delay(0x0f);

while(IRQ_I==0);

Delay(0xffff);

IRQ_OUT;

IRQ_O=1;

IRQ_IN;

if(IRQ_I==0)

{

STA_MARK_RX)

SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);

if(rx_buf[0]==2)

{

LED01=1;

Delay(0xffFff);

LED01=0;

Delay(0xfFfff);

rx_buf[0]=0;

}

else

IRQ_OUT;

IRQ_IN;

Delay(0x0f);

}

}

}

@far@interruptvoidTIM4_interrupt(void)

staticunsignedintTIM_Work;

staticunsignedcharTIM_Time;

if(But01==0)

{

if(TIM_Work++>

2500)

{

//LED01=~LED01;

TIM_Work=0;

else

TIM_Work=0;

//LED01=0;

TIM4_SR1=0x00;

return;

stm8_interrupt_vector.c内容

/*BASICINTERRUPTVECTORTABLEFORSTM8devices

*Copyright(c)2007STMicroelectronics

*/

typedefvoid@far(*interrupt_handler_t)(void);

structinterrupt_vector{

unsignedcharinterrupt_instruction;

interrupt_handler_tinterrupt_handler;

};

@far@interruptvoidNonHandledInterrupt(void)

{

/*inordertodetectunexpectedeventsduringdevelopment,

itisrecommendedtosetabreakpointonthefollowinginstruction

externvoid_stext();

/*startuproutine*/

extern@far@interruptvoidTIM4_interrupt(void);

structinterrupt_vectorconst_vectab[]={

{0x82,(interrupt_handler_t)_stext},/*reset*/

{0x82,NonHandledInterrupt},/*trap*/

{0x82,NonHandledInterrupt},/*irq0*/

{0x82,NonHandledInterrupt},/*irq1*/

{0x82,NonHandledInterrupt},/*irq2*/

{0x82,NonHandledInterrupt},/*irq3*/

{0x82,NonHandledInterrupt},/*irq4*/

{0x82,NonHandledInterrupt},/*irq5*/

{0x82,NonHandledInterrupt},/*irq6*/

{0x82,NonHandledInterrupt},/*irq7*/

{0x82,NonHandledInterrupt},/*irq8*/

{0x82,NonHandledInterrupt},/*irq9*/

{0x82,NonHandledInterrupt},/*irq10*/

{0x82,NonHandledInterrupt},/*irq11*/

{0x82,NonHandledInterrupt},/*irq12*/

{0x82,NonHandledInterrupt},/*irq13*/

{0x82,NonHandledInterrupt},/*irq14*/

{0x82,NonHandledInterrupt},/*irq15*/

{0x82,NonHandledInterrupt},/*irq16*/

{0x82,NonHandledInterrupt},/*irq17*/

{0x82,NonHandledInterrupt},/*irq18*/

{0x82,NonHandledInterrupt},/*irq19*/

{0x82,NonHandledInterrupt},/*irq20*/

{0x82,NonHandledInterrupt},/*irq21*/

{0x82,NonHandledInterrupt},/*irq22*/

{0x82,NonHandledInterrupt},/*irq23*/

{0x82,NonHandledInterrupt},/*irq24*/

{0x82,TIM4_interrupt},/*irq25*/

{0x82,NonHandledInterrupt},/*irq26*/

{0x82,NonHandledInterrupt},/*irq27*/

{0x82,NonHandledInterrupt},/*irq28*/

{0x82,NonHandledInterrupt},/*irq29*/

stm8l10x_diy_port.c内容

stm8l10x_gpio.h"

/**************************************************************

功能:

配置IO口

配置IO输入输出说明

输出:

配置PC_DDR,PC_CR1寄存器,把相应位拉高即可

输入:

只配置PD_CR1寄存器,拉高即可

/*************************************************************/

voidgpio_init(void)

GPIO_DeInit(GPIOB);

//恢复寄存器到默认值

GPIO_DeInit(GPIOC);

GPIO_DeInit(GPIOD);

/*配置输出****************************************************/

PC_DDR|=0x04;

//LED

PC_CR1|=0x04;

PD_DDR|=0x01;

PD_CR1|=0x01;

PC_DDR|=0x01;

//CE

PC_CR1|=0x01;

PB_DDR|=0x10;

//CSN

PB_CR1|=0x10;

PB_DDR|=0x20;

//SCK

PB_CR1|=0x20;

PB_DDR|=0x80;

//MISO

PB_CR1|=0x80;

/*配置输入****************************************************/

PC_CR1|=0x08;

//buttom

PB_CR1|=0x01;

PB_CR1|=0x40;

//mOSI

PB_CR1|=0x02;

//IRQ

LED01=1;

LED02=1;

//IRQ作为输出

CE=0;

//chipenable

CSN=1;

//Spidisable

SCK=0;

//Spiclocklineinithigh

配置时钟

voidclk_init(void)

CLK_CKDIVR=0x00;

CLK_PCKENR|=0x04;

//开启定时器4中断(必修有)

/*TIM2:

0x01

TIM3:

0x02

TIM4:

0x04

************************************************************/

延迟函数

voidDelay(unsignedintnCount)

while(nCount!

=0)

nCount--;

按键防抖动及按键锁

charKey_Scanf(charButtom)

{

staticcharKey_Lock;

charButtomStatus;

ButtomStatus=But_OFF;

if(Buttom==But_ON)

Delay(0x3ff);

/*消抖*/

if((Buttom==But_ON)&

&

(Key_Lock==1))

ButtomStatus=But_ON;

elseKey_Lock=1;

returnButtomStatus;

stm8l10x_diy_port.h内容

#ifndef__stm8l10x_diy_port_H

#define__stm8l10x_diy_port_H

#defineL0

#defineH1

#defineBut_ON0//按下时为低

#defineBut_OFF1

#defineIRQ_OUTPB_DDR|=0x02//配置输出

#defineIRQ_INPB_DDR&

=0xFD//配置输入

_BoolIRQ_O@PB_ODR:

1;

//IRQ输出。

使用IRQ_O=1;

_BoolIRQ_I@PB_IDR:

//IRQ输入。

使用if(IRQ_I==1)

/*LED灯系列,输出**********************************************/

_BoolLED02@PD_ODR:

0;

_BoolLED01@PC_ODR:

2;

/*按键系列,输入***********************************************/

_BoolBut01@PB_IDR:

_BoolBut02@PC_IDR:

3;

_BoolCE@PC_ODR:

_BoolCSN@PB_ODR:

4;

_BoolSCK@PB_ODR:

5;

_BoolMOSI@PB_IDR:

6;

//MOSI

_BoolMISO@PB_ODR:

7;

#defineButtom01Key_Scanf(But01)//宏定义函数

#defineButtom02Key_Scanf(But02)

voidgpio_init(void);

voidclk_init(void);

voidDelay(unsignedintnCount);

charKey_Scanf(charButtom);

#endif

stm8l10x_diy_time.c内容

stm8l10x_tim4.h"

//#defineLibrary_function

voidtime_init(void)

_asm("

sim"

);

#ifdefLibrary_function

TIM4_DeInit();

TIM4_TimeBaseInit(TIM4_Prescaler_1,100);

TIM4_Cmd(ENABLE);

TIM4_ITConfig(TIM4_IT_Update,ENABLE);

TIM4_ARRPreloadConfig(ENABLE);

#else

TIM4_ARR=100;

//定时0.1ms

TIM4_IER=0x01;

//使能溢出中断

TIM4_PSCR=0x04;

//16分频

TIM4_CR1=0x01;

//enableTimer4

#endif

rim"

//中断总开关

stm8l10x_diy_time.h内容

#ifndef__stm8l10x_diy_time_H

#define__stm8l10x_diy_time_H

voidtime_init(void);

NRF24L01.c内容

stm8L10X_DIY_PORT.h"

//#defineRX_DRsta&

0x40

//#defineTX_DSsta&

0x20

//#defineMAX_RTsta&

0x10

unsignedcharTX_ADDRESS[5]={0x34,0x43,0x10,0x10,0x01};

unsignedcharrx_buf[TX_PLOAD_WIDTH];

unsignedchartx_buf[TX_PLOAD_WIDTH];

unsignedcharflag;

/*****************状态标志*****************************************/

unsignedcharsta;

//状态标志

/*****************SPI时序函数******************************************/

unsignedcharSPI_RW(unsignedchardate)

unsignedchari;

for(i=0;

i<

8;

i++)//循环8次

if(date&

0x80)

MISO=1;

else

MISO=0;

//byte最高位输出到MOSI

date<

<

=1;

//低一位移位到最高位

SCK=1;

if(MOSI)//拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据

date|=0x01;

//读MISO到byte最低位

SCK=0;

//SCK置低

return(date);

//返回读出的一字节}

/**************************************************/

/**************************************************

Function:

SPI_RW_Reg();

Description:

Writesvalue'

value'

toregister'

reg'

unsignedcharSPI_RW_Reg(unsignedcharreg,unsignedcharvalue)

unsignedcharstatus;

CSN=0;

//CSNlow,initSPItransaction

status=SPI_RW(reg);

//selectregister

SPI_RW(value);

//..andwritevaluetoit..

CSN=1;

//CSNhighagain

return(status);

//returnnRF24L01statusbyte

SPI_Read();

ReadonebytefromnRF24L01register,'

unsignedcharSPI_Read(unsignedcharreg)

unsignedcharreg_val;

//CSNlow,initializeSPIcommunication...

SPI_RW(reg);

//Selectregistertoreadfrom..

reg_val=SPI_RW(0);

//..thenreadregistervalue

//CSNhigh,terminateSPIcommunication

return(reg_val);

//returnregistervalue

SPI_Read_Buf();

Reads'

bytes'

#ofbytesfromregister'

TypicallyusedtoreadRXpayload,Rx/Txaddress

unsignedcharSPI_Read_Buf(unsignedcharreg,unsignedchar*pBuf,unsignedcharbytes)

unsignedcharstatus,byte_ctr;

//SetCSNlow,initSPItranaction

//Selectregistertowritetoandreadstatusbyte

for(byte_ctr=0;

byte_ctr<

bytes;

byte_ctr++)

pBuf[byte_ctr]=SPI_RW(0);

//PerformSPI_RWtoreadbytefromnRF24L01

//SetCSNhighagain

//r

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1