标签: uart

在C中的UART中接收未定义大小的消息

我正在为LPC2148编写自己的驱动程序,我想到了一个问题.如何在UART中收到未指定大小的消息?

想到的唯一两件事是:1 - 配置看门狗并在时间用完时结束接收.2-使它无论何时向其发送消息都必须有消息字符结束.

在我看来,第一选择似乎更好,但我想知道是否有人有更好的答案,我知道必须有.

非常感谢你

c arm lpc uart

2
推荐指数
1
解决办法
2411
查看次数

stm32f0 uart编程

我正试图让usart在我的stm32f0-discovery上工作,但是现在我发现有关这种文档的文档"缺乏"所以有没有人有一个为stm32f050工作的任何usart的例子?

谢谢.

Bart Teunissen

stm32 discovery uart usart

2
推荐指数
1
解决办法
1万
查看次数

比特被炒了

问题:我向UART发送一个值,在另一个UART上出现空值.

- - 细节 - -

这些都是PIC处理器(PIC24和PIC32)

它们都硬接线到印刷电路板上.

它们通过其中的一个UART模块进行通信.

它们(表面上;根据文档)都配置为115200 bps,8-N-1

没有握手,没有启用CTS,没有启用RTS; 我只是把字节放在线上,然后就可以了.

(这些是短小的4字节命令和响应,非常整齐)

PIC32的速率为80 MHz.

PIC24的F [cy] = 14745600

即,它是14.7456 MHz

PIC24发送四个字节(特定的命令序列)

当我在UART的中断服务程序设置一个断点时,PIC32显示空值,然后我看到前四个后(PIC32代码)断点重复点击,我继续看到空值(这是自PIC24以来有意义的)没发送任何东西)

也就是说,当没有理由时,UART似乎重复产生中断

我没有在PIC32端写代码,我每天都在学习它是如何工作的.

然后我让代码运行起来,我不可避免地会说到一条线

    52570 1D01_335C 9D01_335C  _general_execption_handler  sdbbp 0x0
Run Code Online (Sandbox Code Playgroud)

当我到达时,

  • 原因登记册成立 0080181C
  • EPC注册成立 9D00F228
  • SP寄存器成立 9F8FFFA0

这就像发条一样,所以我怀疑__ISR不会停止.MpLab告诉我这个......

           432:
           433:                 //*********************************************************//
           434:                 void __ISR(_UART1_VECTOR, ipl5) IntUart1Handler(void)   //MCU communication port
           435:                 {
           9D00F204  415DE800   rdpgpr      sp,sp
           9D00F208  401A7000   mfc0        k0,EPC
           9D00F20C  401B6000   mfc0        k1,Status
           9D00F210  27BDFF88   addiu       sp,sp,-120
           9D00F214  AFBA0074   sw          k0,116(sp)
           9D00F218  AFBB0070   sw          k1,112(sp)
           9D00F21C  7C1B7844 …
Run Code Online (Sandbox Code Playgroud)

embedded serial-port pic uart

2
推荐指数
2
解决办法
386
查看次数

当我增加UART波特率时,字节之间的延迟为什么会增加?

需要注意的一些有趣的事情,我尚未完全理解。我的UART初始化为9600波特。我已经通过逻辑分析仪查看了线路上的TX,并且我发送的字节具有最小的延迟。预期为每字节36µs。

现在,如果我使用不同的波特率(例如115,200)初始化该UART,则发送的每个字节之间的延迟将大大增加。它跳至每字节125µs。

这引起了一个问题,因为我必须在某个时候提高波特率,但是响应时间有限。

延迟是否应该在字节之间减少,因为它应该以相同的频率发送更多的比特?

此阻塞方法用于写入UART。

static inline void uart2_putchar(uint8_t data)
{
    // Disable interrupts to get exclusive access to ring_buffer_out.
    cli();
    if (ring_buffer_is_empty(&ring_buffer_out2)) {
        // First data in buffer, enable data ready interrupt
        UCSR2B |=  (1 << UDRIE2);
    }
    // Put data in buffer
    ring_buffer_put(&ring_buffer_out2, data);

    // Re-enable interrupts
    sei();
}
Run Code Online (Sandbox Code Playgroud)

这是基于中断触发的。

ISR(USART2_UDRE_vect)
{
    // if there is data in the ring buffer, fetch it and send it
    if (!ring_buffer_is_empty(&ring_buffer_out2)) {
        UDR2 = ring_buffer_get(&ring_buffer_out2);
    }
    else {
        // …
Run Code Online (Sandbox Code Playgroud)

c embedded avr serial-port uart

2
推荐指数
1
解决办法
1478
查看次数

C#串口读取HEX数据

我正在编写一个 C# 应用程序,用于同时从多个串行 COM 端口读取数据,以分析 IPOD 的数据通信。发送的数据需要解释为十六进制字节。例如,

0xFF 0x55 0x01 0x00 0x04 0xC3 0xFF 0x55 ...

例如,我希望能够阅读此内容并将其显示在富文本框中

0xFF 0x55 0x01 0x00 0x04 0xC3
0xFF 0x55 ... 
Run Code Online (Sandbox Code Playgroud)

命令的开头包括标头(0xFF 0x55),其余部分是命令+参数+校验和。

解决这个问题的最佳方法是什么?

我目前有:

private delegate void SetTextDeleg(string text);

void sp_DataReceivedRx(object sender, SerialDataReceivedEventArgs e)
{
    Thread.Sleep(500);
    try
    {
        string data = IPODRxPort.ReadExisting(); // Is this appropriate??
        // Invokes the delegate on the UI thread, and sends the data that was received to the invoked method.
        // ---- The "si_DataReceived" method will be executed on …
Run Code Online (Sandbox Code Playgroud)

c# hex uart

2
推荐指数
1
解决办法
2万
查看次数

用于STM32微控制器的UART over USB

我正在尝试通过STM324x9I-EVAL开发板上的USB接口实现UART.目的是串行地向伺服控制器(或其他硬件)发送命令.我已经在开发板上成功实现了USB_Device_CDC示例,但我不确定如何在没有带有驱动程序的PC的情况下如何工作.就其他硬件而言,USB端口现在看起来就像一个串口吗?或者另一端是否还需要驱动程序或某种界面?

我想指出我知道以下帖子:

通过USB模拟UART

但我不相信我的问题在答案的背景下得到了充分的回答.

embedded usb usbserial stm32 uart

2
推荐指数
2
解决办法
1万
查看次数

未生成STM32 HAL UART RXNE中断

我正在使用HAL驱动程序和CubeMX生成的代码.在我打电话的主要例程中HAL_UART_Receive_IT().通过UART传输数据(以环回方式连接)后,我可以看到模块正在接收字节并在寄存器中设置RXNE位.但是没有产生中断?我无法解释为什么......在HAL_UART_Receive_IT()函数中有代码启用中断,所以有什么问题?

hal interrupt stm32 uart

2
推荐指数
1
解决办法
2236
查看次数

从AVR的UART接收char *

我想使用 ATMEGA16 通过 UART 接收字符串(指向字符的指针)。我在套件上烧录了这段代码,然后我使用超级终端(realterm)并进行了输入字符串(“on”)的测试,如果收到它,则 portc(LEDS)将设置为 1,但它不起作用.. 。 任何人!?:D

功能实现

#include <avr/io.h>

#define F_CPU 8000000UL
unsigned char *x;

#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)

void uartinit()
{
    UCSRB |= (1 << RXEN) | (1 << TXEN);   
                    // Turn on the transmission and reception circuitry
    UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); 
                    // Use 8-bit character sizes

    UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value.. …
Run Code Online (Sandbox Code Playgroud)

c avr uart

1
推荐指数
1
解决办法
2万
查看次数

OMAP4460 UART如何实现全双工传输?

THR和RHR寄存器的基址相同.那么可以同时发送和接收吗?

c linux-device-driver embedded-linux uart

1
推荐指数
1
解决办法
76
查看次数

gps 模块的 Linux 设备驱动程序

我对 linux 还很陌生,我目前正在尝试将 gps 模块集成到 linux ARM 控制器中。gps 是 ublox NEO M8N,我将它连接到 UART6。我需要帮助才能开始与 GPS 通信。我搜索了一些文件,但找不到任何相关的文件。我知道我首先需要为它编写内核设备驱动程序,但是我不知道从哪里开始。有人可以指出我正确的方向,或者告诉我如何编写设备驱动程序并开始从 GPS 读取纬度和经度。

linux arm linux-device-driver linux-kernel uart

1
推荐指数
1
解决办法
2925
查看次数