1.修复pin驱动错误。

This commit is contained in:
MacRsh
2023-12-03 02:17:56 +08:00
parent 43e6393241
commit c984ade934
7 changed files with 51 additions and 73 deletions

View File

@@ -211,8 +211,8 @@ menu "Board configure"
endmenu
config MR_USING_SPI3
bool "Enable SPI3 driver"
default n
bool "Enable SPI3 driver"
default n
menu "SPI3 driver configure"
depends on MR_USING_SPI3

View File

@@ -146,7 +146,7 @@ static uint32_t drv_adc_read(struct mr_adc *adc, int channel)
while (ADC_GetFlagStatus(adc_data->instance, ADC_FLAG_EOC) == RESET)
{
i++;
if (i > UINT16_MAX)
if (i > INT16_MAX)
{
return 0;
}

View File

@@ -9,7 +9,7 @@
#include "drv_i2c.h"
#ifdef MR_USING_I2C
#define MR_USING_I2C1
#if !defined(MR_USING_I2C1) && !defined(MR_USING_I2C2)
#error "Please define at least one I2C macro like MR_USING_I2C1. Otherwise undefine MR_USING_I2C."
#else
@@ -187,7 +187,7 @@ static void drv_i2c_bus_start(struct mr_i2c_bus *i2c_bus)
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_MODE_SELECT) == RESET)
{
i++;
if (i > UINT16_MAX)
if (i > INT16_MAX)
{
return;
}
@@ -203,7 +203,7 @@ static void drv_i2c_bus_send_addr(struct mr_i2c_bus *i2c_bus, int addr, int addr
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) == RESET)
{
i++;
if (i > UINT16_MAX)
if (i > INT16_MAX)
{
return;
}
@@ -216,7 +216,7 @@ static void drv_i2c_bus_send_addr(struct mr_i2c_bus *i2c_bus, int addr, int addr
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_BYTE_TRANSMITTED) == RESET)
{
i++;
if (i > UINT16_MAX)
if (i > INT16_MAX)
{
return;
}
@@ -231,50 +231,38 @@ static void drv_i2c_bus_stop(struct mr_i2c_bus *i2c_bus)
I2C_GenerateSTOP(i2c_bus_data->instance, ENABLE);
}
static ssize_t drv_i2c_bus_read(struct mr_i2c_bus *i2c_bus, uint8_t *buf, size_t size)
static uint8_t drv_i2c_bus_read(struct mr_i2c_bus *i2c_bus)
{
struct drv_i2c_bus_data *i2c_bus_data = (struct drv_i2c_bus_data *)i2c_bus->dev.drv->data;
ssize_t rd_size = 0;
int i = 0;
for (rd_size = 0; rd_size < size; rd_size++)
/* Read data */
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_BYTE_RECEIVED) == RESET)
{
int i = 0;
/* Read data */
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_BYTE_RECEIVED) == RESET)
i++;
if (i > INT16_MAX)
{
i++;
if (i > UINT16_MAX)
{
return rd_size;
}
return 0;
}
buf[rd_size] = I2C_ReceiveData(i2c_bus_data->instance);
}
return rd_size;
return (uint8_t)I2C_ReceiveData(i2c_bus_data->instance);
}
static ssize_t drv_i2c_bus_write(struct mr_i2c_bus *i2c_bus, const uint8_t *buf, size_t size)
static void drv_i2c_bus_write(struct mr_i2c_bus *i2c_bus, uint8_t data)
{
struct drv_i2c_bus_data *i2c_bus_data = (struct drv_i2c_bus_data *)i2c_bus->dev.drv->data;
ssize_t wr_size = 0;
int i = 0;
for (wr_size = 0; wr_size < size; wr_size++)
/* Write data */
I2C_SendData(i2c_bus_data->instance, data);
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_BYTE_TRANSMITTED) == RESET)
{
int i = 0;
/* Write data */
I2C_SendData(i2c_bus_data->instance, buf[wr_size]);
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_BYTE_TRANSMITTED) == RESET)
i++;
if (i > INT16_MAX)
{
i++;
if (i > UINT16_MAX)
{
return wr_size;
}
return;
}
}
return wr_size;
}
static void drv_i2c_bus_isr(struct mr_i2c_bus *i2c_bus)

View File

@@ -249,7 +249,7 @@ static int drv_pin_configure(struct mr_pin *pin, int number, int mode)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
EXTI_InitStructure.EXTI_Line = pin_drv_data->pin;
EXTI_InitStructure.EXTI_Line = pin_data->pin;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
GPIO_EXTILineConfig(number / 16, exti_line);
@@ -286,20 +286,20 @@ static int drv_pin_configure(struct mr_pin *pin, int number, int mode)
}
pin_irq_mask[exti_line] = -1;
EXTI_InitStructure.EXTI_Line = pin_drv_data->pin;
EXTI_InitStructure.EXTI_Line = pin_data->pin;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
GPIO_EXTILineConfig(number / 16, exti_line);
EXTI_Init(&EXTI_InitStructure);
}
/* Configure GPIO */
GPIO_InitStructure.GPIO_Pin = pin_drv_data->pin;
GPIO_InitStructure.GPIO_Pin = pin_data->pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(pin_port_data->port, &GPIO_InitStructure);
return MR_EOK;
}
static int drv_pin_read(struct mr_pin *pin, int number)
static uint8_t drv_pin_read(struct mr_pin *pin, int number)
{
struct drv_pin_port_data *pin_port_data = drv_pin_get_port_data(number);
struct drv_pin_data *pin_data = drv_pin_get_data(number);
@@ -309,10 +309,10 @@ static int drv_pin_read(struct mr_pin *pin, int number)
{
return 0;
}
return (int)GPIO_ReadInputDataBit(pin_port_data->port, pin_drv_data->pin);
return (int)GPIO_ReadInputDataBit(pin_port_data->port, pin_data->pin);
}
static void drv_pin_write(struct mr_pin *pin, int number, int value)
static void drv_pin_write(struct mr_pin *pin, int number, uint8_t value)
{
struct drv_pin_port_data *pin_port_data = drv_pin_get_port_data(number);
struct drv_pin_data *pin_data = drv_pin_get_data(number);
@@ -322,7 +322,7 @@ static void drv_pin_write(struct mr_pin *pin, int number, int value)
{
return;
}
GPIO_WriteBit(pin_port_data->port, pin_drv_data->pin, value);
GPIO_WriteBit(pin_port_data->port, pin_data->pin, value);
}
void EXTI0_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

View File

@@ -572,53 +572,43 @@ static int drv_serial_configure(struct mr_serial *serial, struct mr_serial_confi
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(serial_data->instance, &USART_InitStructure);
USART_Cmd(serial_data->instance, state);
USART_ClearFlag(serial_data->instance, USART_FLAG_RXNE);
USART_ClearFlag(serial_data->instance, USART_FLAG_TC);
return MR_EOK;
}
static ssize_t drv_serial_read(struct mr_serial *serial, uint8_t *buf, size_t size)
static uint8_t drv_serial_read(struct mr_serial *serial)
{
struct drv_serial_data *serial_data = (struct drv_serial_data *)serial->dev.drv->data;
ssize_t rd_size = 0;
int i = 0;
for (rd_size = 0; rd_size < size; rd_size++)
/* Read data */
while (USART_GetFlagStatus(serial_data->instance, USART_FLAG_RXNE) == RESET)
{
int i = 0;
/* Read data */
while (USART_GetFlagStatus(serial_data->instance, USART_FLAG_RXNE) == RESET)
i++;
if (i > INT16_MAX)
{
i++;
if (i > UINT16_MAX)
{
return rd_size;
}
return 0;
}
buf[rd_size] = USART_ReceiveData(serial_data->instance);
}
return rd_size;
return (uint8_t)USART_ReceiveData(serial_data->instance);
}
static ssize_t drv_serial_write(struct mr_serial *serial, const uint8_t *buf, size_t size)
static void drv_serial_write(struct mr_serial *serial, uint8_t data)
{
struct drv_serial_data *serial_data = (struct drv_serial_data *)serial->dev.drv->data;
ssize_t wr_size = 0;
int i = 0;
for (wr_size = 0; wr_size < size; wr_size++)
/* Write data */
USART_SendData(serial_data->instance, data);
while (USART_GetFlagStatus(serial_data->instance, USART_FLAG_TC) == RESET)
{
int i = 0;
/* Write data */
while (USART_GetFlagStatus(serial_data->instance, USART_FLAG_TC) == RESET)
i++;
if (i > INT16_MAX)
{
i++;
if (i > UINT16_MAX)
{
return wr_size;
}
return;
}
USART_SendData(serial_data->instance, buf[wr_size]);
}
return wr_size;
}
static void drv_serial_start_tx(struct mr_serial *serial)

View File

@@ -358,7 +358,7 @@ static uint32_t drv_spi_bus_read(struct mr_spi_bus *spi_bus)
while (SPI_I2S_GetFlagStatus(spi_bus_data->instance, SPI_I2S_FLAG_RXNE) == RESET)
{
i++;
if (i > UINT16_MAX)
if (i > INT16_MAX)
{
return 0;
}
@@ -375,7 +375,7 @@ static void drv_spi_bus_write(struct mr_spi_bus *spi_bus, uint32_t data)
while (SPI_I2S_GetFlagStatus(spi_bus_data->instance, SPI_I2S_FLAG_TXE) == RESET)
{
i++;
if (i > UINT16_MAX)
if (i > INT16_MAX)
{
return;
}

View File

@@ -9,7 +9,7 @@
#include "drv_timer.h"
#ifdef MR_USING_TIMER
#define MR_USING_TIMER1
#if !defined(MR_USING_TIMER1) && !defined(MR_USING_TIMER2) && !defined(MR_USING_TIMER3) && !defined(MR_USING_TIMER4) && !defined(MR_USING_TIMER5) && !defined(MR_USING_TIMER6) && !defined(MR_USING_TIMER7) && !defined(MR_USING_TIMER8) && !defined(MR_USING_TIMER9) && !defined(MR_USING_TIMER10)
#error "Please define at least one Timer macro like MR_USING_TIMER1. Otherwise undefine MR_USING_TIMER."
#else