void vMBPortSerialEnable(BOOL xRxEnable, BOOL xTxEnable) { rt_uint32_t recved_event; if (xRxEnable) { /* enable RX interrupt */ serial->ops->control(serial, RT_DEVICE_CTRL_SET_INT, (void *)RT_DEVICE_FLAG_INT_RX); /* switch 485 to receive mode */ rt_pin_write(MODBUS_SLAVE_RT_CONTROL_PIN_INDEX, PIN_HIGH);//PIN_LOW); } else { /* switch 485 to transmit mode */ rt_pin_write(MODBUS_SLAVE_RT_CONTROL_PIN_INDEX, PIN_LOW);//PIN_HIGH); /* disable RX interrupt */ serial->ops->control(serial, RT_DEVICE_CTRL_CLR_INT, (void *)RT_DEVICE_FLAG_INT_RX); } if (xTxEnable) { /* start serial transmit */ rt_event_send(&event_serial, EVENT_SERIAL_TRANS_START); } else { /* stop serial transmit */ rt_event_recv(&event_serial, EVENT_SERIAL_TRANS_START, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, 0, &recved_event); } }
void led_thread_entry(void* parameter) { rt_pin_mode(PINRX, GPIO_MODE_OUTPUT_PP); rt_pin_mode(PINTX, GPIO_MODE_OUTPUT_PP); rt_pin_write(PINRX,1); rt_pin_write(PINTX,0); while(1) { rt_thread_delay(RT_TICK_PER_SECOND); rt_pin_write(PINRX,rt_pin_read(PINRX)?0:1); rt_pin_write(PINTX,rt_pin_read(PINTX)?0:1); } }
int main(void) { int count = 1; /* set LED0 pin mode to output */ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); while (count++) { rt_pin_write(LED0_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED0_PIN, PIN_LOW); rt_thread_mdelay(500); } return RT_EOK; }
/** * @brief Turns off the requested LED. * * @param LEDNum is the LED number for the light to turn off. * * This function turns off a single LED. * * @return None. */ void rt_hw_led_off(rt_uint8_t LEDNum) { #ifdef RT_USING_PIN if(LEDNum == 0) rt_pin_write(AM_GPIO_LED0, PIN_HIGH); else if(LEDNum == 1) rt_pin_write(AM_GPIO_LED1, PIN_HIGH); else if(LEDNum == 2) rt_pin_write(AM_GPIO_LED2, PIN_HIGH); else if(LEDNum == 3) rt_pin_write(AM_GPIO_LED3, PIN_HIGH); #endif }
static rt_uint32_t spixfer(struct rt_spi_device *device, struct rt_spi_message *message) { rt_err_t res; RT_ASSERT(device != RT_NULL); RT_ASSERT(device->bus != RT_NULL); RT_ASSERT(device->bus->parent.user_data != RT_NULL); struct stm32_spi * hspi = (struct stm32_spi *)device->bus->parent.user_data; struct stm32_hw_spi_cs *cs = device->parent.user_data; if (message->cs_take) { rt_pin_write(cs->pin, 0); } const rt_uint8_t *sndb = message->send_buf; rt_uint8_t *rcvb = message->recv_buf; rt_int32_t length = message->length; while (length) { res = spitxrx1b(hspi, rcvb, sndb); if (rcvb) { rcvb += SPISTEP(hspi->cfg->data_width); } if (sndb) { sndb += SPISTEP(hspi->cfg->data_width); } if (res != RT_EOK) { break; } length--; } /* Wait until Busy flag is reset before disabling SPI */ while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_BSY) == SET) ; if (message->cs_release) { rt_pin_write(cs->pin, 1); } return message->length - length; }
//cannot be used before completion init rt_err_t stm32_spi_bus_attach_device(rt_uint32_t pin,const char * bus_name,const char * device_name) { struct rt_spi_device * spi_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); RT_ASSERT(spi_device != RT_NULL); struct stm32_hw_spi_cs * cs_pin = (struct stm32_hw_spi_cs *)rt_malloc(sizeof(struct stm32_hw_spi_cs)); RT_ASSERT(cs_pin != RT_NULL); cs_pin->pin = pin; rt_pin_mode(pin,PIN_MODE_OUTPUT); rt_pin_write(pin, 1); return rt_spi_bus_attach_device(spi_device, device_name, bus_name, (void *)cs_pin); }
/** * @brief This function attach device to QSPI bus. * @param device_name QSPI device name * @param pin QSPI cs pin number * @param data_line_width QSPI data lines width, such as 1, 2, 4 * @param enter_qspi_mode Callback function that lets FLASH enter QSPI mode * @param exit_qspi_mode Callback function that lets FLASH exit QSPI mode * @retval 0 : success * -1 : failed */ rt_err_t stm32_qspi_bus_attach_device(const char *bus_name, const char *device_name, rt_uint32_t pin, rt_uint8_t data_line_width, void (*enter_qspi_mode)(), void (*exit_qspi_mode)()) { struct rt_qspi_device *qspi_device = RT_NULL; struct stm32_hw_spi_cs *cs_pin = RT_NULL; rt_err_t result = RT_EOK; RT_ASSERT(bus_name != RT_NULL); RT_ASSERT(device_name != RT_NULL); RT_ASSERT(data_line_width == 1 || data_line_width == 2 || data_line_width == 4); qspi_device = (struct rt_qspi_device *)rt_malloc(sizeof(struct rt_qspi_device)); if (qspi_device == RT_NULL) { LOG_E("no memory, qspi bus attach device failed!"); result = RT_ENOMEM; goto __exit; } cs_pin = (struct stm32_hw_spi_cs *)rt_malloc(sizeof(struct stm32_hw_spi_cs)); if (qspi_device == RT_NULL) { LOG_E("no memory, qspi bus attach device failed!"); result = RT_ENOMEM; goto __exit; } qspi_device->enter_qspi_mode = enter_qspi_mode; qspi_device->exit_qspi_mode = exit_qspi_mode; qspi_device->config.qspi_dl_width = data_line_width; cs_pin->Pin = pin; #ifdef BSP_QSPI_USING_SOFTCS rt_pin_mode(pin, PIN_MODE_OUTPUT); rt_pin_write(pin, 1); #endif result = rt_spi_bus_attach_device(&qspi_device->parent, device_name, bus_name, (void *)cs_pin); __exit: if (result != RT_EOK) { if (qspi_device) { rt_free(qspi_device); } if (cs_pin) { rt_free(cs_pin); } } return result; }
void can_bus_hook(struct rt_can_device *can, struct canledtype *led) { if (can->timerinitflag == 1) { rt_pin_write(led->rtd.pin, 0); } else { if (can->status.rcvchange == 1 || can->status.sndchange == 1) { can->status.rcvchange = 0; can->status.sndchange = 0; rt_pin_write(led->rtd.pin, rt_pin_read(led->rtd.pin) ? 0 : 1); } else { rt_pin_write(led->rtd.pin, 1); } } if (can->timerinitflag == 1) { rt_pin_write(led->err.pin, 0); } else { if (can->status.errcode) { rt_pin_write(led->err.pin, 0); } else { rt_pin_write(led->err.pin, 1); } } }
int Main(void* param) { int ret; init_data_bss(); rt_kprintf("app start up!\r\n"); rt_device_t gpio; gpio = rt_device_find("gpio"); rt_pin_mode(PTA6, PIN_MODE_OUTPUT); uint32_t i; rt_pin_write(PTA6, 0); ui_startup(0, 0); finsh_syscall_append("ui_startup", ui_startup); return 0; }
static rt_uint32_t qspixfer(struct rt_spi_device *device, struct rt_spi_message *message) { rt_size_t len = 0; RT_ASSERT(device != RT_NULL); RT_ASSERT(device->bus != RT_NULL); struct rt_qspi_message *qspi_message = (struct rt_qspi_message *)message; struct stm32_qspi_bus *qspi_bus = device->bus->parent.user_data; #ifdef BSP_QSPI_USING_SOFTCS struct stm32_hw_spi_cs *cs = device->parent.user_data; #endif const rt_uint8_t *sndb = message->send_buf; rt_uint8_t *rcvb = message->recv_buf; rt_int32_t length = message->length; #ifdef BSP_QSPI_USING_SOFTCS if (message->cs_take) { rt_pin_write(cs->pin, 0); } #endif /* send data */ if (sndb) { qspi_send_cmd(qspi_bus, qspi_message); if (qspi_message->parent.length != 0) { if (HAL_QSPI_Transmit(&qspi_bus->QSPI_Handler, (rt_uint8_t *)sndb, 5000) == HAL_OK) { len = length; } else { LOG_E("QSPI send data failed(%d)!", qspi_bus->QSPI_Handler.ErrorCode); qspi_bus->QSPI_Handler.State = HAL_QSPI_STATE_READY; goto __exit; } } else { len = 1; } } else if (rcvb)/* recv data */ { qspi_send_cmd(qspi_bus, qspi_message); #ifdef BSP_QSPI_USING_DMA if (HAL_QSPI_Receive_DMA(&qspi_bus->QSPI_Handler, rcvb) == HAL_OK) #else if (HAL_QSPI_Receive(&qspi_bus->QSPI_Handler, rcvb, 5000) == HAL_OK) #endif { len = length; #ifdef BSP_QSPI_USING_DMA while (qspi_bus->QSPI_Handler.RxXferCount != 0); #endif } else { LOG_E("QSPI recv data failed(%d)!", qspi_bus->QSPI_Handler.ErrorCode); qspi_bus->QSPI_Handler.State = HAL_QSPI_STATE_READY; goto __exit; } } __exit: #ifdef BSP_QSPI_USING_SOFTCS if (message->cs_release) { rt_pin_write(cs->pin, 1); } #endif return len; }
int ewm1062_disable(void) { rt_pin_mode(WIFI_RESET_PIN, PIN_MODE_OUTPUT); rt_pin_write(WIFI_RESET_PIN,PIN_LOW); return RT_EOK; }