如何在Keil环境中编写如下方面的串口方面的全部程序要求能直接运行:1、控制芯片是KEA128;2、在kea128_itc文件里的UART2_IRQHandler函数里编写;3、要求能一次性接收8个字节数据后再将这8个字节数据发送出来;4、数据接收及发送要求带起止位和结束位。
在Keil环境中编写串口程序,实现一次性接收8个字节数据后再发送这8个字节数据,需要完成以下几个步骤:
-
打开Keil IDE,创建一个新的工程并选择KEA128作为目标芯片。
-
在工程目录下创建一个新的源文件kea128_it.c,并在其中编写UART2_IRQHandler()函数。
#include "kea128_it.h"
void UART2_IRQHandler()
{
// 检查接收缓冲区是否有数据
if(UART2->S1 & UART_S1_RDRF_MASK)
{
// 读取接收缓冲区数据
uint8_t data = UART2->D;
// 处理接收数据
// 判断是否接收到了8个字节的数据
if(received_count == 8)
{
// 发送接收到的数据
for(int i = 0; i < 8; i++)
{
// 等待发送缓冲区为空
while(!(UART2->S1 & UART_S1_TDRE_MASK));
// 发送数据
UART2->D = received_data[i];
}
// 重置接收计数器
received_count = 0;
}
else
{
// 存储接收到的数据
received_data[received_count++] = data;
}
}
}
- 在工程目录下创建一个新的头文件kea128_it.h,并在其中定义相关变量。
#ifndef KEA128_IT_H_
#define KEA128_IT_H_
#include "SKEAZ1284.h"
// 存储接收到的数据
uint8_t received_data[8];
// 接收计数器
uint8_t received_count;
#endif /* KEA128_IT_H_ */
- 在主程序中初始化串口2,并使能中断。
#include "SKEAZ1284.h"
#include "kea128_it.h"
int main(void)
{
// 初始化串口2
// 使能时钟
SIM->SCGC |= SIM_SCGC_UART2_MASK;
// 设置UART2引脚功能
PORTA->PCR[2] = PORT_PCR_MUX(2); // UART2_RX
PORTA->PCR[3] = PORT_PCR_MUX(2); // UART2_TX
// 关闭UART2
UART2->C2 &= ~UART_C2_UARTEN_MASK;
// 配置波特率
uint16_t sbr = (SystemCoreClock / (16 * 9600));
UART2->BDH = UART_BDH_SBR(sbr >> 8);
UART2->BDL = UART_BDL_SBR(sbr);
// 使能接收中断
UART2->C2 |= UART_C2_RIE_MASK;
// 打开UART2
UART2->C2 |= UART_C2_RE_MASK | UART_C2_TE_MASK | UART_C2_UARTEN_MASK;
// 启用全局中断
__enable_irq();
while(1)
{
// 主程序逻辑
}
}
这样,就实现了一次性接收8个字节数据后再发送这8个字节数据的串口程序。注意在主程序中添加其他需要的逻辑。编译并下载程序到KEA128芯片中,即可运行。
原文地址: https://www.cveoy.top/t/topic/i4ka 著作权归作者所有。请勿转载和采集!