FlashMyPico.com
log in about discover docs scratchpad
This website requires a Chrome-based browser in order to access the WebUSB API. Without it, you may not be able to flash your device.

uart_advanced
for Raspberry Pi Picoβ„’ 2, submitted by flashmypico

Loading...

/** * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/stdlib.h" #include "hardware/uart.h" #include "hardware/irq.h" /// \tag::uart_advanced[] #define UART_ID uart0 #define BAUD_RATE 115200 #define DATA_BITS 8 #define STOP_BITS 1 #define PARITY UART_PARITY_NONE // We are using pins 0 and 1, but see the GPIO function select table in the // datasheet for information on which other pins can be used. #define UART_TX_PIN 0 #define UART_RX_PIN 1 static int chars_rxed = 0; // RX interrupt handler void on_uart_rx() { while (uart_is_readable(UART_ID)) { uint8_t ch = uart_getc(UART_ID); // Can we send it back? if (uart_is_writable(UART_ID)) { // Change it slightly first! ch++; uart_putc(UART_ID, ch); } chars_rxed++; } } int main() { // Set up our UART with a basic baud rate. uart_init(UART_ID, 2400); // Set the TX and RX pins by using the function select on the GPIO // Set datasheet for more information on function select gpio_set_function(UART_TX_PIN, UART_FUNCSEL_NUM(UART_ID, UART_TX_PIN)); gpio_set_function(UART_RX_PIN, UART_FUNCSEL_NUM(UART_ID, UART_RX_PIN)); // Actually, we want a different speed // The call will return the actual baud rate selected, which will be as close as // possible to that requested int __unused actual = uart_set_baudrate(UART_ID, BAUD_RATE); // Set UART flow control CTS/RTS, we don't want these, so turn them off uart_set_hw_flow(UART_ID, false, false); // Set our data format uart_set_format(UART_ID, DATA_BITS, STOP_BITS, PARITY); // Turn off FIFO's - we want to do this character by character uart_set_fifo_enabled(UART_ID, false); // Set up a RX interrupt // We need to set up the handler first // Select correct interrupt for the UART we are using int UART_IRQ = UART_ID == uart0 ? UART0_IRQ : UART1_IRQ; // And set up and enable the interrupt handlers irq_set_exclusive_handler(UART_IRQ, on_uart_rx); irq_set_enabled(UART_IRQ, true); // Now enable the UART to send interrupts - RX only uart_set_irq_enables(UART_ID, true, false); // OK, all set up. // Lets send a basic string out, and then run a loop and wait for RX interrupts // The handler will count them, but also reflect the incoming data back with a slight change! uart_puts(UART_ID, "\nHello, uart interrupts\n"); while (1) tight_loop_contents(); } /// \end:uart_advanced[]
This firmware image was imported from the pico-examples repository. 


Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
   disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
   disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
   derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Homepage: https://github.com/raspberrypi/pico-examples
Repository: https://github.com/raspberrypi/pico-examples/tree/master/uart/uart_advanced

β“˜ Tips