亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
stm32配置SI4463 443M公共頻段通訊源碼
[打印本頁]
作者:
L.sir
時間:
2018-5-31 16:16
標題:
stm32配置SI4463 443M公共頻段通訊源碼
通過stm32 IO口模擬PSI通訊實現SI4463配置與使用
0.png
(41.99 KB, 下載次數: 56)
下載附件
2018-5-31 17:57 上傳
stm32單片機源程序如下:
/*******************************************************
Copyright (C), 2016-10-15 liuzijian.All Rights Reserved
File name: Si4463.c
Author: liuzijian
Version: V1.0.0
Date: 2016-10-15
Description: IO simulation SPI, SI4463 initialization and communication
SWD3 Software creates Si4463 configuration file(radio_config_Si4463.h)
Revision History:
Version Date Author Modification
V1.0.0 2016-10-15 liuzijain 初次編寫
*********************************************************/
#include "stm32f10x.h"
#include "Si4463.h"
#include "radio_config_Si4463.h"
#include "user_subfunction.h"
#include <stdio.h>
const u8 set[1000] = RADIO_CONFIGURATION_DATA_ARRAY;
#define s46_BUFF_LEN 1 // 數據長度設置
u8 s46_Send_Buff[s46_BUFF_LEN]={0}; // 發送數據緩沖數組
u8 s46_Rece_Buff[s46_BUFF_LEN]={0}; // 接收數據緩沖數組
/*
// 函數: SPIGPIO_Config()
// 描述: 配置SPI模擬的輸入輸出端口
// 配置IO模擬SPI
// RF4463_IRQ--PC8輸入 GPIO1--PB15輸入 SDN--PB12輸出 NSEL--PC6輸出 SCLK--PB14輸出 SDO--PC7輸入 SDI--PB13輸出 */
void SPIGPIO_Config(void)
{ //輸出
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//輸入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/*****************************************************************************
函數: s46_SPI_WR_Byte()
描述: 通過SPI寫一個byte到Si4463,同時從寄存器讀取一個Byte
參數: byte 待寫入字節數據
return 讀取到的字節數據
******************************************************************************/
uint8 s46_SPI_WR_Byte(uint8 byte)
{
uint8 i;
for(i=0; i<8; i++)
{// 循環8次
if((byte & 0x80) == 0x80)
{SDI_SET;} // 將byte最高位輸出到SDI
else
{SDI_CLR;}
byte <<= 1; // 低一位移位到最高位
SCLK_SET;
delay4us(10); // 拉高SLCK,從SI讀入1位數據,同時Si4463從SO輸出1位數據
// byte |= SDO; // 讀SDO到byte最低位
if(SDO==1){byte |= 0x01;}
else{byte |= 0x00;}
SCLK_CLR;
delay4us(10); // SCLK置低
}
return(byte); // 返回讀取的1Byte數據
}
/***********************************************************************
函數: s46_SPI_W_CMD()
描述: 向芯片中寫入指令
參數: cmd 指令字
plen 寫入參數數量(寫入屬性時最多為12個參數)
*p 寫入參數存放地址
loopcts 0=忽略CTS檢測; 1=檢測CTS
*****************************************************************************/
void s46_SPI_W_CMD(uint8 cmd, uint16 plen, uint8 *p, uint8 loopcts)
{
uint8 i=0;
if(loopcts == 1){while(GPIO1 == 0);} // 等待CTS為高(執行完成)
NSEL_CLR; // nSEL置低,開始數據傳輸過程
s46_SPI_WR_Byte(cmd); // 寫入指令字
for(i=0; i<plen; i++)
{ s46_SPI_WR_Byte(p[i]); // 寫入后續數據
}
NSEL_SET; // nSEL置高,結束數據傳輸過程
}
/*************************************************************
函數: s46_SPI_R_CMD()
描述: 從芯片中讀取指令響應
參數: cmd 指令字
plen 讀取響應數量(讀取屬性時最多為16個參數)
*p 讀取響應存放地址
loopcts 0=忽略CTS檢測; 1=檢測CTS
return CTS響應值
******************************************************************/
uint8 s46_SPI_R_CMD(uint8 cmd, uint8 len, uint8 *p, uint8 loopcts)
{
uint8 i=0;
//uint8_t cts=0;
if(loopcts == 1){while(GPIO1 == 0);} // 等待CTS為高(執行完成)
NSEL_CLR; // nSEL置低,開始數據傳輸過程
s46_SPI_WR_Byte(cmd); // 寫入指令字
for(i=0; i<=len; i++)
{ p[i] = s46_SPI_WR_Byte(0); // 讀取寄存器數值
}
NSEL_SET; // nSEL置高,結束數據傳輸過程
return(p[0]); // 返回CTS
}
/******************************************************************************
函數: s46_Power_ON_Reset()
描述: 芯片上電后的復位
參數: 無
******************************************************************************/
void s46_Power_ON_Reset(void)
{
uint8 buff[7] = {RF_POWER_UP};
NSEL_SET;
SDI_CLR;
SCLK_CLR;
SDN_SET; // SDN=1=進入掉電模式
delayms(1); // 等待1ms
SDN_CLR; // SDN=0=進入上電模式
while(GPIO1 == 0); // 等待CTS為高,上電成功
s46_SPI_W_CMD(buff[0], 6, &buff[1], 1); // 寫入POR指令及配置數據
}
/*********************************************************************
函數: s46_Load_Radio_Config()
描述: 將WDS生成的配置列表寫入芯片中
參數: none
************************************************************************/
void s46_Load_Radio_Config(void)
{
uint16 i = 0;
i = set[i] + 1; // 跳過POR配置數據
do
{ s46_SPI_W_CMD(set[i+1], set[i]-1,(uint8 *)&set[i+2], 0); // 寫入配置列表中的數據
i = i + set[i] + 1; // 指向下一組數據
}while (set[i] != 0x00); // 空值(len=0x00)結束
}
/**************************************************
函數: s46_Clear_Interrupt_Status()
描述: 清除全部中斷,并返回數據包處理器中斷狀態
參數: 無
*****************************************************/
uint8 s46_Clear_Interrupt_Status(void)
{
uint8 buff[9];
buff[0] = 0; buff[1] = 0; buff[2] = 0;
s46_SPI_W_CMD(s46CMD_GET_INT_STATUS_B0_CMD, 3, buff, 1); // 寫入返回中斷狀態指令
s46_SPI_R_CMD(s46CMD_READ_CMD_BUFF_B0_CMD, 9, buff, 1); // 讀取CTS和指令響應
return(buff[s46RIN_GET_INT_STATUS_B3_PH_PEND]); // 返回數據包處理器中斷狀態
}
/********************************************************************
函數: s46_Send_Packet()
描述: 發送數據包
參數: *p 發送數據的首地址
************************************************************************/
void s46_Send_Packet(uint8 *p)
{
uint8 buff[8];
s46_Clear_Interrupt_Status(); // 清除全部中斷
while(RF4463_IRQ != 1); // 等待nIRQ為高(中斷已清除)
s46_SPI_W_CMD(s46CMD_WRITE_TX_FIFO_B0_CMD, s46_BUFF_LEN, p, 0); // 將待發送數據寫入TX_FIFO
buff[0] = s46PRT_INT_CTL_PH_ENABLE_GROUP; // 屬性分組=包處理器中斷使能
buff[1] = 1; // 屬性數量=1
buff[2] = s46PRT_INT_CTL_PH_ENABLE_INDEX; // 起始地址=PH_ENABLE
buff[3] = s46PFS_INT_CTL_PH_ENABLE_PACKET_SENT_EN; // 使能PACKET_SENT中斷
s46_SPI_W_CMD(s46CMD_SET_PROPERTY_B0_CMD, 4, buff, 1); // 寫入包處理器中斷使能屬性
buff[0] = RADIO_CONFIGURATION_DATA_CHANNEL_NUMBER; // CHANNEL
buff[1] = s46RFP_START_TX_B2_NOCHANGE // 發送結束后進入READY狀態
| s46RFP_START_TX_B2_USE // 更新參數并進入TX模式
| s46RFP_START_TX_B2_TRANSMIT_FIFO // 發送FIFO中的數據(下溢時產生中斷)
| s46RFP_START_TX_B2_IMMEDIATE; // 立即發送
buff[2] = (uint8)(s46_BUFF_LEN >> 8); // TX_LEN bit12:8
buff[3] = (uint8)(s46_BUFF_LEN); // TX_LEN bit7:0
buff[4] = 0; // 數據包之間的間隔時間
buff[5] = 0; // 數據包重復次數
s46_SPI_W_CMD(s46CMD_START_TX_B0_CMD, 6, buff, 1); // 啟動發送
while(RF4463_IRQ != 0); // 等待nIRQ為低(執行完成)
s46_Clear_Interrupt_Status(); // 清除全部中斷
s46_Start_RX(); // 返回RX狀態
}
/******************************************************************************
函數: s46_Start_RX()
描述: 進入接收狀態
參數: 無
******************************************************************************/
void s46_Start_RX(void)
{
uint8 buff[7];
s46_Clear_Interrupt_Status(); // 清除全部中斷
buff[0] = s46CFP_CHANGE_STATE_B1_READY; // 進入READY模式
s46_SPI_W_CMD(s46CMD_CHANGE_STATE_B0_CMD, 1, buff, 1); // 發送指令
buff[0] = s46PRT_INT_CTL_PH_ENABLE_GROUP; // 屬性分組=包處理器中斷使能
buff[1] = 1; // 屬性數量=1
buff[2] = s46PRT_INT_CTL_PH_ENABLE_INDEX; // 起始地址=PH_ENABLE
buff[3] = s46PFS_INT_CTL_PH_ENABLE_PACKET_RX_EN // 使能PACKET_RX中斷
| s46PFS_INT_CTL_PH_ENABLE_CRC_ERROR_EN; // 使能CRC_ERROR中斷
s46_SPI_W_CMD(s46CMD_SET_PROPERTY_B0_CMD, 4, buff, 1); // 寫入包處理器中斷使能屬性
buff[0] = RADIO_CONFIGURATION_DATA_CHANNEL_NUMBER; // CHANNEL
buff[1] = s46RFP_START_RX_B2_USE // 更新參數并進入RX模式
| s46CFP_START_RX_B2_IMMEDIATE; // 立即接收
buff[2] = (uint8)(s46_BUFF_LEN >> 8); // RX_LEN bit12:8
buff[3] = (uint8)(s46_BUFF_LEN); // TX_LEN bit7:0
buff[4] = s46CFP_START_RX_B5B7_NO_CHANGE; // 前導檢測超時時自動進入的狀態
buff[5] = s46CFP_START_RX_B5B7_READY; // 接收到有效數據包時自動進入的狀態
buff[6] = s46CFP_START_RX_B5B7_READY; // 接收到無效數據包時自動進入的狀態
s46_SPI_W_CMD(s46CMD_START_RX_B0_CMD, 7, buff, 1); // 啟動接收
}
/*******************************************************************************
函數: uint8 s46_RX_Check(uint8 *p)
描述: 檢測接收狀態
參數: *p 接收數據存放地址
return 接收完成標志(0=無接收, 1=接收到有效數據)
*******************************************************************************/
uint8 s46_RX_Check(uint8 *p)
{
uint8 t=0;
uint8 buff[3];
uint8 r=0;
if(RF4463_IRQ == 0)
{
t = s46_Clear_Interrupt_Status(); // 清除全部中斷,并返回數據包處理器中斷狀態
if(t & s46RFP_GET_INT_STATUS_B4_PACKET_RX){ // 檢查是否為數據包接收完成中斷
s46_SPI_R_CMD(s46CMD_READ_RX_FIFO_B0_CMD, s46_BUFF_LEN, p, 0); // 讀取RX_FIFO中的數據
r = 1; // 檢測到有效數據包
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
stm32-si4463.rar
(11.62 KB, 下載次數: 104)
2018-5-31 16:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
weiwei4
時間:
2019-1-7 16:26
謝謝分享,正需要,下載學習
作者:
magicme
時間:
2019-1-8 10:55
謝謝分享
作者:
gdgn_526345
時間:
2019-3-16 11:43
謝謝分享!謝謝!
作者:
酷愛diy
時間:
2019-3-28 11:36
謝謝,SI4463這模塊挺難搞的,非常感謝
作者:
goodmasher
時間:
2023-2-3 12:49
雖然是stm32的應用程序,但設計思路應該也適用STM8S,謝謝樓主的分享。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1