嵌入式作业5

在函数main.c中初始化三种颜色的灯

gpio_init(LIGHT_BLUE, GPIO_OUTPUT, LIGHT_OFF);

//蓝灯

gpio_init(LIGHT_GREEN, GPIO_OUTPUT, LIGHT_OFF);

//绿灯

gpio_init(LIGHT_RED, GPIO_OUTPUT, LIGHT_OFF);

//红灯

同时为了响应以上修改,进入isr。c文件添加以下代码

void UART_User_Handler(void)

{

    //声明局部变量

    uint8_t ch;

    uint8_t flag;

    uint32_t mMainLoopCount;

    mMainLoopCount=0;

    //关总中断

    DISABLE_INTERRUPTS;

    //读取字节

    ch=uart_recv(UART_User, &flag); //调用接收一个字节的函数,清接收中断位

    //根据标志判断是否真正收到一个字节的数据

    if(flag)

    {

        //有数据

        if(ch=='B')

        {

            gpio_set(LIGHT_BLUE, LIGHT_ON);

            gpio_set(LIGHT_RED, LIGHT_OFF);

            gpio_set(LIGHT_GREEN, LIGHT_OFF);

        }

        else if(ch=='G')

        {

            gpio_set(LIGHT_GREEN, LIGHT_ON);

            gpio_set(LIGHT_RED, LIGHT_OFF);

            gpio_set(LIGHT_BLUE, LIGHT_OFF);

        }

        else if(ch=='R')

        {

            gpio_set(LIGHT_RED, LIGHT_ON);

            gpio_set(LIGHT_BLUE, LIGHT_OFF);

            gpio_set(LIGHT_GREEN, LIGHT_OFF);

        }

        else

        {

            gpio_set(LIGHT_RED, LIGHT_OFF);

            gpio_set(LIGHT_BLUE, LIGHT_OFF);

            gpio_set(LIGHT_GREEN, LIGHT_OFF);

        }

        ch=ch+1;

        uart_send(UART_User, ch); //回发接收到的字节

    }

}

(2)UART部分用直接地址方式实现(即不调用uart.c中的函数,其他部分如GPIO、中断设置可调用函数)。

在寄存器程序里面初始化:

volatile uint32_t* uart_isr; // UART中断和状态寄存器基地址

volatile uint32_t* uart_crl; //UART控制寄存器1基地址

volatile uint32_t* uart_cr2; //UART控制寄存器2基地址

volatile uint32_t* uart_cr3; //UART控制寄存器3基地址

volatile uint32_t* uart_tdr; //UART发送数据寄存器

volatile uint32_t* uart_rdr; //UART接收数据寄存器32106100129

uint16_t usartdiv; //BRR寄存器应赋的值

//变量赋值

RCC_APB1=0x40021058UL; //UART时钟使能寄存器地址

RCC_AHB2=0x4002104CUL; //GPIO的A口时钟使能寄存器地址

gpio_ptr=0x48000000UL; //GPIOA端口的基地址

uart_ptr=0x40004400UL; //UART2端口的基地址

gpio_mode=0x48000000UL; //引脚模式寄存器地址=口基地址

gpio_afr1=0x48000020UL; // GPIO复用功能低位寄存器

uart_cr1=0x40004400UL; //UART控制寄存器1基地址

uart_rdr=0x40004424UL; //UART接收数据寄存器32106100129

uart_brr=0x4000440CUL; //UART波特率寄存器地址

uart_isr=0x4000441CUL; // UART中断和状态寄存器基地址

uart_tdr=0x40004428UL; //UART发送数据寄存器

uart_cr2=0x40004404UL; //UART控制寄存器2基地址

uart_cr3=0x40004408UL; //UART控制寄存器3基地址

继续在main程序中初始化三种灯:

gpio_init(LIGHT_BLUE, GPIO_OUTPUT, LIGHT_OFF);

//蓝灯

gpio_init(LIGHT_GREEN, GPIO_OUTPUT, LIGHT_OFF);

//绿灯

gpio_init(LIGHT_RED, GPIO_OUTPUT, LIGHT_OFF);

//红灯

最后实现并运行:

while(1) {

    uint8_t ch;

    ch=uart_rdr; //获取接收寄存器中的值

    *uart_tdr = ch+1; //发送接收到数据的下一个字符

    if(ch=='B')

    {

        gpio_set(LIGHT_BLUE, LIGHT_ON);

        gpio_set(LIGHT_GREEN, LIGHT_OFF);

        gpio_set(LIGHT_RED, LIGHT_OFF);

    }

    else if(ch=='R')

    {

        gpio_set(LIGHT_RED, LIGHT_ON);

        gpio_set(LIGHT_BLUE, LIGHT_OFF);

        gpio_set(LIGHT_GREEN, LIGHT_OFF);

    }

    else if(ch=='G')

    {

        gpio_set(LIGHT_GREEN, LIGHT_ON);

        gpio_set(LIGHT_RED, LIGHT_OFF);

        gpio_set(LIGHT_BLUE, LIGHT_OFF);

    }

    else

    {

        gpio_set(LIGHT_BLUE, LIGHT_OFF);

        gpio_set(LIGHT_GREEN, LIGHT_OFF);

        gpio_set(LIGHT_RED, LIGHT_OFF);

    }

}

之后运行结果与(1)大致相同

//初始化红灯五、运行结果

用适当的文字、截图、图片等描述实验的结果。

通过以上代码,使用构建调用的方式实现了实验内容功能:

实验主板的灯对应输入字符点亮:

输入R点亮红灯

输入B点亮蓝灯

输入G点亮绿灯。

 输入其他字符:

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-26 04:40:25       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-26 04:40:25       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-26 04:40:25       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-26 04:40:25       20 阅读

热门阅读

  1. HTML5 游戏开发基础及流程

    2024-05-26 04:40:25       11 阅读
  2. Unity vscode在mac上的编译环境设置

    2024-05-26 04:40:25       12 阅读
  3. 算法设计与分析-回溯法

    2024-05-26 04:40:25       12 阅读
  4. TLS/SSL握手协议

    2024-05-26 04:40:25       9 阅读
  5. RabbitMQ

    RabbitMQ

    2024-05-26 04:40:25      11 阅读
  6. RabbitMQ02-RebbitMQ简介及交换器

    2024-05-26 04:40:25       11 阅读
  7. 19_文件系统的制作 -YAFFS2

    2024-05-26 04:40:25       12 阅读
  8. 记录ES7.X更新数据的低级错误

    2024-05-26 04:40:25       13 阅读
  9. debian/control文件中常见字段的介绍

    2024-05-26 04:40:25       14 阅读