#include "spi_ch9434.h"
#include "delay.h"
#include "spi.h"
#include "CH9434.h"
#include "usart.h"
#include "sys.h"
void CH9434_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);//使能GPIOG时钟
//GPIOB14
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;//PB14
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//PG7
GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化
GPIO_SetBits(GPIOG,GPIO_Pin_7);//PG7输出1,防止NRF干扰SPI FLASH的通信
CH9434_CS=1; //SPI FLASH不选中
SPI1_Init(); //初始化SPI
SPI1_SetSpeed(SPI_BaudRatePrescaler_4); //设置为21M时钟 168
/*
APB2总线上的默认最高频率位 xxMHz,SPI1的时钟由APB2分频而来,可以选择(2 4 8 16 32 64 128 256)
SPI时钟 = xxMHz/分频系数
**/
}
/* INT#引脚初始化 */
void InitIntGPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//PA1--INT#
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init( GPIOA, &GPIO_InitStructure );
GPIO_SetBits(GPIOA,GPIO_Pin_6);
}
/* SPI交换一个字节接口 */
uint8_t CH9434_SPI_WRITE_BYTE(uint8_t dat)
{
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//等待发送区空
SPI_I2S_SendData(SPI1, (uint16_t)dat); //通过外设SPIx发送一个byte 数据
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一个byte
return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据
}
/* SPI接口SCS引脚控制,0:低电平 1:高电平 */
void CH9434_SPI_SCS_OP(uint8_t dat)
{
if(dat) GPIO_SetBits(GPIOB, GPIO_Pin_14); //SCS置高
else GPIO_ResetBits(GPIOB, GPIO_Pin_14);//SCS置低
}
void CH9434_US_DELAY(void)
{
delay_us(1);
}
/* GPIO 设置方式 */
void CH9434_SetGPIO(void)
{
/* 开启GPIO功能 */
CH9434GPIOFuncSet(CH9434_GPIO_0|CH9434_GPIO_1|CH9434_GPIO_2|CH9434_GPIO_3|CH9434_GPIO_4|CH9434_GPIO_5|CH9434_GPIO_6|CH9434_GPIO_7,
CH9434_GPIO_ENABLE,CH9434_GPIO_DIR_IN,CH9434_GPIO_PU_DISABLE,CH9434_GPIO_PD_DISABLE);
/* (1) 打开对应 GPIO 使能位; */
//R8_GPIO_FUNC_EN_0
CH9434GPIOPinOut(CH9434_GPIO_0|CH9434_GPIO_1|CH9434_GPIO_2|CH9434_GPIO_3|CH9434_GPIO_4|CH9434_GPIO_5|CH9434_GPIO_6|CH9434_GPIO_7,
CH9434_GPIO_ENABLE);
/* (2) 设置上下拉电阻配置以及方向; */
//R8_GPIO_DIR_MOD_0 0:GPIO 设置成输入 1:GPIO 设置成输出
CH9434GPIOPinOut(CH9434_GPIO_0|CH9434_GPIO_1|CH9434_GPIO_2|CH9434_GPIO_3|CH9434_GPIO_4|CH9434_GPIO_5|CH9434_GPIO_6|CH9434_GPIO_7,
CH9434_GPIO_DIR_IN);
//R8_GPIO_PU_MOD_0 0:关闭 GPIO 上拉电阻 1:开启 GPIO 上拉电阻
CH9434GPIOPinOut(CH9434_GPIO_0|CH9434_GPIO_1|CH9434_GPIO_2|CH9434_GPIO_3|CH9434_GPIO_4|CH9434_GPIO_5|CH9434_GPIO_6|CH9434_GPIO_7,
CH9434_GPIO_PU_ENABLE);
//R8_GPIO_PD_MOD_0 0:关闭 GPIO 下拉电阻 1:开启 GPIO 下拉电阻
CH9434GPIOPinOut(CH9434_GPIO_0|CH9434_GPIO_1|CH9434_GPIO_2|CH9434_GPIO_3|CH9434_GPIO_4|CH9434_GPIO_5|CH9434_GPIO_6|CH9434_GPIO_7,
CH9434_GPIO_PD_ENABLE);
/* 3) 设置或者读取“输入输出电平”寄存器,当设置该寄存器,GPIO 方向为输出时处理对应
位,并输出对应的电平值,输入引脚不关心对应位;当读取该寄存器,GPIO 方向为输入时
处理对应位,输出引脚不关心对应位。 */
//R8_GPIO_PIN_VAL_0 1:输出高电平 0:输入低电平
CH9434GPIOPinOut(CH9434_GPIO_0|CH9434_GPIO_1|CH9434_GPIO_2|CH9434_GPIO_3|CH9434_GPIO_4|CH9434_GPIO_5|CH9434_GPIO_6|CH9434_GPIO_7,
CH9434_GPIO_SET);
delay_ms(10);
}
void CH9434CLKMode_Init(void)
{
//开启时钟倍频时串口基准时钟 = 32MHz * 倍频系数 / 分频系数 倍频系数固定为 15
//串口基准时钟 = 32MHz * 15 / 分频系数 =
CH9434InitClkMode(CH9434_ENABLE, //外部晶振
CH9434_ENABLE, //开启倍频功能
13);//分频系数
}
void UsartConfig_Init(void)
{
uint32_t test_bps;
/* 初始化串口 */
test_bps = 115200;
//初始化串口1
CH9434UARTxParaSet(CH9434_UART_IDX_0, //串口
test_bps, //波特率
CH9434_UART_8_BITS_PER_CHAR, //数据位
CH9434_UART_ONE_STOP_BIT, //停止位
CH9434_UART_NO_PARITY); //校验位
CH9434UARTxFIFOSet(CH9434_UART_IDX_0,
CH9434_ENABLE, //FIFO功能使能
CH9434_UART_FIFO_MODE_1280); //FIFO触发等级 CH9434_UART_FIFO_MODE_256 CH9434_UART_FIFO_MODE_1280
CH9434UARTxFlowSet(CH9434_UART_IDX_0,
CH9434_DISABLE);
CH9434UARTxIrqSet(CH9434_UART_IDX_0,
CH9434_DISABLE, //modem信号中断
CH9434_ENABLE, //线路状态中断
CH9434_ENABLE, //发送中断 CH9434_ENABLE,CH9434_DISABLE
CH9434_ENABLE); //接收中断
CH9434UARTxIrqOpen(CH9434_UART_IDX_0);
CH9434UARTxRtsDtrPin(CH9434_UART_IDX_0,
CH9434_ENABLE, //RTS引脚电平状态
CH9434_ENABLE); //DTR引脚电平状态
//初始化串口1
CH9434UARTxParaSet(CH9434_UART_IDX_1,
test_bps,
CH9434_UART_8_BITS_PER_CHAR,
CH9434_UART_ONE_STOP_BIT,
CH9434_UART_NO_PARITY);
CH9434UARTxFIFOSet(CH9434_UART_IDX_1,
CH9434_ENABLE,
CH9434_UART_FIFO_MODE_1280);
CH9434UARTxFlowSet(CH9434_UART_IDX_1,
CH9434_ENABLE);
CH9434UARTxIrqSet(CH9434_UART_IDX_1,
CH9434_DISABLE, //modem信号中断
CH9434_ENABLE, //线路状态中断
CH9434_ENABLE, //发送中断
CH9434_ENABLE); //接收中断
CH9434UARTxIrqOpen(CH9434_UART_IDX_1);
CH9434UARTxRtsDtrPin(CH9434_UART_IDX_1,
CH9434_ENABLE, //RTS引脚电平状态
CH9434_ENABLE); //DTR引脚电平状态
//初始化串口2
CH9434UARTxParaSet(CH9434_UART_IDX_2,
test_bps,
CH9434_UART_8_BITS_PER_CHAR,
CH9434_UART_ONE_STOP_BIT,
CH9434_UART_NO_PARITY);
CH9434UARTxFIFOSet(CH9434_UART_IDX_2,
CH9434_ENABLE,
CH9434_UART_FIFO_MODE_1280);
CH9434UARTxFlowSet(CH9434_UART_IDX_2,
CH9434_ENABLE);
CH9434UARTxIrqSet(CH9434_UART_IDX_2,
CH9434_DISABLE, //modem信号中断
CH9434_ENABLE, //线路状态中断
CH9434_ENABLE, //发送中断
CH9434_ENABLE); //接收中断
CH9434UARTxIrqOpen(CH9434_UART_IDX_2);
CH9434UARTxRtsDtrPin(CH9434_UART_IDX_2,
CH9434_ENABLE, //RTS引脚电平状态
CH9434_ENABLE); //DTR引脚电平状态
//初始化串口3
CH9434UARTxParaSet(CH9434_UART_IDX_3,
test_bps,
CH9434_UART_8_BITS_PER_CHAR,
CH9434_UART_ONE_STOP_BIT,
CH9434_UART_NO_PARITY);
CH9434UARTxFIFOSet(CH9434_UART_IDX_3,
CH9434_ENABLE,
CH9434_UART_FIFO_MODE_1280);
CH9434UARTxFlowSet(CH9434_UART_IDX_3,
CH9434_ENABLE);
CH9434UARTxIrqSet(CH9434_UART_IDX_3,
CH9434_DISABLE, //modem信号中断
CH9434_ENABLE, //线路状态中断
CH9434_ENABLE, //发送中断
CH9434_ENABLE); //接收中断
CH9434UARTxIrqOpen(CH9434_UART_IDX_3);
CH9434UARTxRtsDtrPin(CH9434_UART_IDX_3,
CH9434_ENABLE, //RTS引脚电平状态
CH9434_ENABLE); //DTR引脚电平状态
}
u8_t CH9434UARTxRead48H(void)
{
u8_t uart_r
STM32 SPI驱动 CH9434串口拓展芯片
5星 · 超过95%的资源 需积分: 44 115 浏览量
2022-09-13
21:29:32
上传
评论 6
收藏 12KB ZIP 举报
沐沐_.
- 粉丝: 657
- 资源: 5
最新资源
- 基于UC3842+LTS26Q1565A设计PC机充电器 硬件(原理图+PCB)工程文件.zip
- Hive SQL经典面试题,大数据SQL经典面试题
- Qt实现喷码器代码,实现二维码、条形码、图形的旋转、移动等
- 基于LM324芯片比较器传感器模块AD09设计硬件(原理图+PCB)工程文件.zip
- HTTP请求 - 记一笔-添加记账.jmx
- 2205040245凡永超硬间隔svm.ipynb
- Qt喷码器demo,演示软件,不是代码
- 目标跟踪-基于目标中心点同时进行目标检测+目标跟踪算法实现-项目源码-优质项目实战.zip
- Python《文本特征分析-全唐诗数据挖掘及分析 》+源代码
- Netron-Setup-4.5.0
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论5