在线时间101 小时
UID3617445
注册时间2020-2-7
NXP金币213

TA的每日心情 | 开心 2025-7-10 13:07 |
---|
签到天数: 43 天 连续签到: 1 天 [LV.5]常住居民I
版主
  
- 积分
- 1524

- 最后登录
- 2025-7-10
|
LPC55S69之串口
串口用例子就可以了。
一、引脚。
二、代码。
- <font size="3" face="微软雅黑">
- #include "board.h"
- #include "fsl_usart.h"
- #include "pin_mux.h"
- #include <stdbool.h>
-
- #define DEMO_USART USART0
- #define DEMO_USART_CLK_SRC kCLOCK_Flexcomm0
- #define DEMO_USART_CLK_FREQ CLOCK_GetFlexCommClkFreq(0U)
- #define DEMO_USART_IRQHandler FLEXCOMM0_IRQHandler
- #define DEMO_USART_IRQn FLEXCOMM0_IRQn
- #define DEMO_RING_BUFFER_SIZE 16
-
- uint8_t g_tipString[] =
- "Usart functional API interrupt example\r\nBoard receives characters then sends them out\r\nNow please input:\r\n";
- uint8_t demoRingBuffer[DEMO_RING_BUFFER_SIZE];
- volatile uint16_t txIndex; /* Index of the data to send out. */
- volatile uint16_t rxIndex; /* Index of the memory to save new arrived data. */
-
- void DEMO_USART_IRQHandler(void) {
- uint8_t data;
- if ((kUSART_RxFifoNotEmptyFlag | kUSART_RxError) & USART_GetStatusFlags(DEMO_USART)) {
- data = USART_ReadByte(DEMO_USART);
- if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) {
- demoRingBuffer[rxIndex] = data;
- rxIndex++;
- rxIndex %= DEMO_RING_BUFFER_SIZE;
- }
- }
- }
-
- int main(void) {
- usart_config_t config;
-
- CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
- BOARD_InitPins();
- BOARD_BootClockPLL150M();
- BOARD_InitDebugConsole();
-
- USART_GetDefaultConfig(&config);
- config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
- config.enableTx = true;
- config.enableRx = true;
-
- USART_Init(DEMO_USART, &config, DEMO_USART_CLK_FREQ);
- USART_WriteBlocking(DEMO_USART, g_tipString, (sizeof(g_tipString) / sizeof(g_tipString[0])) - 1);
- USART_EnableInterrupts(DEMO_USART, kUSART_RxLevelInterruptEnable | kUSART_RxErrorInterruptEnable);
- EnableIRQ(DEMO_USART_IRQn);
-
- while (1) {
- while ((kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART)) && (rxIndex != txIndex)) {
- USART_WriteByte(DEMO_USART, demoRingBuffer[txIndex]);
- txIndex++;
- txIndex %= DEMO_RING_BUFFER_SIZE;
- }
- }
- }</font>
复制代码 三、说明。
将串口线的TXD连接开发板P8的TX,RXD连接开发板P8的RX。
烧完代码,板子会发一串字符过来,然后就是发送什么,它就回响什么。
四、其它问题。
1、使用串口0(FC0)时,需要在P1上插上短路帽,否则U6会导致RXD引脚不能拉低,而影响串口0接收数据。
2、由于Xpresso编辑器对中文支持不好,不能直接写成如下形式:
SendString("启动");
可以将中文转成16进制的编码,存入数组中,再发送,如下所示:
s8 strStart[] = {0xC6,0xF4,0xB6,0xAF}; // 启动
SendString(strStart);
3、该例子的串口收发是使用了FIFO缓冲器,所以使用USART_WriteByte()发送字节,发现很久没发出去,而且有部分字节被冲刷掉。所以需要改成以下发送、接收函数。
- <font size="3" face="微软雅黑">void SendChar(u8 t) {
- USART_WriteByte(USART0, t);
- while(!(kUSART_TxFifoEmptyFlag & USART_GetStatusFlags(USART0)));
- }
- void FLEXCOMM0_IRQHandler(void) {
- uint8_t data;
- while((kUSART_RxFifoNotEmptyFlag & USART_GetStatusFlags(USART0))) {
- data = USART_ReadByte(USART0);
- }
- }</font>
复制代码
文章出处:点击
|
|