VRX与VRY使用ADC功能。
想要使用ADC,需要确定使用的引脚是否有ADC外设功能。
当前只有AO引脚需要使用到ADC接口,所以DO引脚可以使用开发板上其他的GPIO。这里选择使用PA1和PA2的附加ADC功能。使用ADC的第1道和2通道。
ADC功能引脚
模
块接线图
移植步骤中的导入.c和.h文件与
【CW32模块使用】DHT11温湿度传感器
相同,
只是将.c和.h文件更改为bsp_joystick.c与bsp_joystick.h。这里不再过多讲述,移植完成后面修改相关代码。
在文件bsp_joystick.c中,编写如下代码。
void drv_spi_init( void )
{
GPIO_InitTypeDef GPIO_InitStruct1;
GPIO_InitTypeDef GPIO_InitStruct2;
SPI_GPIO_RCC();
RCC_SPI_HARDWARE_ENABLE();
BSP_SPI_AF_SCK();
BSP_SPI_AF_MISO();
BSP_SPI_AF_MOSI();
GPIO_InitStruct1.Pins = SPI_NSS_GPIO_PIN|
SPI_CLK_GPIO_PIN|
SPI_MOSI_GPIO_PIN;
GPIO_InitStruct1.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct1.Speed = GPIO_SPEED_HIGH;
GPIO_Init(SPI_GPIO_PORT, &GPIO_InitStruct1);
GPIO_InitStruct2.Pins = SPI_MISO_GPIO_PIN;
GPIO_InitStruct2.Mode = GPIO_MODE_INPUT_PULLUP;
GPIO_Init(SPI_GPIO_PORT, &GPIO_InitStruct2);
spi_set_nss_high();
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_Speed = SPI_Speed_Low;
SPI_Init(PORT_SPI, &SPI_InitStructure);
SPI_Cmd(PORT_SPI, ENABLE);
}
uint16_t drv_spi_read_write_byte( uint8_t TxByte )
{
uint16_t l_Data = 0;
uint16_t l_WaitTime = 0;
while(RESET == SPI_GetFlagStatus(PORT_SPI, SPI_FLAG_TXE))
{
if( SPI_WAIT_TIMEOUT == ++l_WaitTime )
{
break;
}
}
l_WaitTime = SPI_WAIT_TIMEOUT / 2;
SPI_SendData(PORT_SPI, TxByte);
while(RESET == SPI_GetFlagStatus(PORT_SPI, SPI_FLAG_RXNE))
{
if( SPI_WAIT_TIMEOUT == ++l_WaitTime )
{
break;
}
}
l_Data = SPI_ReceiveData(PORT_SPI);
return l_Data;
}
void drv_spi_read_write_string( uint8_t* ReadBuffer, uint8_t* WriteBuffer, uint16_t Length )
{
spi_set_nss_low( );
while( Length-- )
{
*ReadBuffer = drv_spi_read_write_byte( *WriteBuffer );
ReadBuffer++;
WriteBuffer++;
}
spi_set_nss_high( );
}
在文件bsp_joystick.h中,编写如下代码。
#ifndef __DRV_SPI_H__
#define __DRV_SPI_H__
#include "board.h"
#define SPI_GPIO_RCC() __RCC_GPIOA_CLK_ENABLE()
#define SPI_GPIO_PORT CW_GPIOA
#define SPI_CLK_GPIO_PIN GPIO_PIN_5
#define SPI_MISO_GPIO_PIN GPIO_PIN_6
#define SPI_MOSI_GPIO_PIN GPIO_PIN_7
#define SPI_NSS_GPIO_PIN GPIO_PIN_4
#define spi_set_nss_high( ) GPIO_WritePin(SPI_GPIO_PORT, SPI_NSS_GPIO_PIN, GPIO_Pin_SET)
#define spi_set_nss_low( ) GPIO_WritePin(SPI_GPIO_PORT, SPI_NSS_GPIO_PIN, GPIO_Pin_RESET)
#define RCC_SPI_HARDWARE_ENABLE() __RCC_SPI1_CLK_ENABLE()
#define PORT_SPI CW_SPI1
#define BSP_SPI_AF_SCK() PA05_AFx_SPI1SCK()
#define BSP_SPI_AF_MISO() PA06_AFx_SPI1MISO()
#define BSP_SPI_AF_MOSI() PA07_AFx_SPI1MOSI()
void drv_spi_init( void );
uint16_t drv_spi_read_write_byte( uint8_t TxByte );
void drv_spi_read_write_string( uint8_t* ReadBuffer, uint8_t* WriteBuffer, uint16_t Length );
#endif