微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > 华清远见linux校培Day3笔记

华清远见linux校培Day3笔记

时间:10-02 整理:3721RD 点击:
1.主优先级相同,复优先级越高,最先得到执行
    RTS的低电平复位,DTR的高电平进bootloader
2.GPIOC4, 外部中断点灯
    GPIO的配置
        首先看原理图,确定要使用的管脚,GPIOB12, GPIOB13, GPIOB14
        a.定义一个结构体
        b.开启外设时钟
        c.对结构体成员变量进行幅值
                1.引脚编号的选择
                        GPIO_Pin_0 | GPIO_Pin_1
                2.引脚模式的选择
                        GPIO_Mode_IN, GPIO_Mode_Out_PP
                3.引脚输出速度的限制
                        GPIO_Speed_50M
        d.调用初始化函数,将数值写入寄存器
                GPIO_Init(GPIOB, &GPIO_InitStructure);

3.中断分组 0 - 4, 5个中断分组
        需要配置两个控制器
                EXIT:外部中断控制器
                NVIC:可嵌套的中断控制器
               
4.管脚作为中断源,必须开启复用AFIO时钟
        对结构体的成员变量赋值
        a.中断的通道选择: EXIT_Line
                只要引脚的编号为0,那么外部中断通道为0
                只要引脚的编号为1,那么外部中断通道为1
                引脚编号为X,就选择X号中断线
        b.中断模式的选择 EXTIMode_TypeDef
                EXTI_Mode_Interrupt = 0x00, //中断
                EXTI_Mode_Event = 0x04 //事件
                如果作为中断的话,必须选择第一个
               
        c.中断的触发方式选择 EXTI_Trigger
                EXTI_Trigger_Rising = 0x08, 上升沿
                EXTI_Trigger_Falling = 0x0C,  下降沿
                EXTI_Trigger_Rising_Falling = 0x10 双边沿
               
        d.为选择的中断线设置新的状态
                FunctionalState = ENABLE OR DISABLE;
                开启或者关闭中断线路
               
5.调用初始化函数,将数值写入寄存器
6.NVIC:可嵌套的中断控制向量的配置
        a.定义一个结构体,用来配置NVIC可嵌套中断向量控制器
                NVIC_InitTypeDef NVIC_InitStructure;
       
        b.中断分组的设置
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
                        NVIC_PriorityGroup_0: 0 bits for pre-emption priority
                          *                                4 bits for subpriority
                        NVIC_PriorityGroup_1: 1 bits for pre-emption priority
                          *                                3 bits for subpriority
                        NVIC_PriorityGroup_2: 2 bits for pre-emption priority
                          *                                2 bits for subpriority
                        NVIC_PriorityGroup_3: 3 bits for pre-emption priority
                          *                                1 bits for subpriority
                        NVIC_PriorityGroup_4: 4 bits for pre-emption priority
                          *                                0 bits for subpriority
        c.结构体成员的赋值       
                (1)中断向量的选择
                        NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn;
                        参数在Stm32f10x_exit.h当中的IRQn_Type结构体
                        每一个中断线有自己对应的中断向量
                        比如中断线4的中断向量选择:  EXTI4_IRQn = 10,   
                          
                (2)主优先级的选择
                        NVIC_IRQChannelPreemptionPriority
               
                (3)副优先级的选择
                        NVIC_IRQChannelSubPriority
               
                (4)使能信号NVIC_IRQChannelCmd
                        ENABLE OR DISABLE 开启或者关闭中断向量控制器
                       
7.调用NVIC初始化函数,将数值写入相应的寄存器
        写入相应的地址
       
8.当中断配置好了,编写中断服务函数
        中断处理函数在Stm32F10x_it.c里面
        一个中断向量对应一个中断处理函数
        EXTI4_IRQn 对应的中断服务函数是 :void EXTI4_IRQHandler(void)
                中断处理函数的名字,可以在startup_stm32f10x_hd.s里面看到
9.中断处理函数
        a.判断是否真的产生了中断,判断中断标志位有没有产生
                if(EXTI_GetITStatus(EXTI_Line4) != RESET)
                        RESET 代表没有标志位产生
                        SET 代表中断标志位产生
        b.做相应的操作(根据不同的需求)
        c.清除中断标志位,必须
                EXTI_ClearITPendingBit(EXTI_Line4);
       
10.总结:引脚号——中断线——中断向量——中断处理函数
11.如果要实现串口的全双工模式
        TX对应的这个GPIO必须设置为复用推挽输出模式
        RX对应的这个GPIO必须设置为复用浮空输入模式
       
12.串口的配置
        a.定义一个结构体:USART_InitTypeDef USART_InitStructure
       
        b.选择波特率 115200 9600
       
        c.选择数据位长度 常用的是8个数据位
                #define USART_WordLength_8b                  ((uint16_t)0x0000)
                #define USART_WordLength_9b                  ((uint16_t)0x1000)
               
        d.停止位:常用选择1位
                USART_StopBits
                #define USART_StopBits_1                     ((uint16_t)0x0000)
                #define USART_StopBits_0_5                   ((uint16_t)0x1000)
                #define USART_StopBits_2                     ((uint16_t)0x2000)
                #define USART_StopBits_1_5                   ((uint16_t)0x3000)
                #define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \
                                                                                         ((STOPBITS) == USART_StopBits_0_5) || \
                                                                                         ((STOPBITS) == USART_StopBits_2) || \
                                                                                         ((STOPBITS) == USART_StopBits_1_5))
       
        e.选择是否使用奇偶校验 USART_Parity
                一般情况下,如果不太注重数据的准确性,可以不使用奇偶校验
                #define USART_Parity_No 不使用                     ((uint16_t)0x0000)
                #define USART_Parity_Even 偶数                   ((uint16_t)0x0400)
                #define USART_Parity_Odd 奇数                    ((uint16_t)0x0600)
                #define IS_USART_PARITY(PARITY) (((PARITY) == USART_Parity_No) || \
                                                                 ((PARITY) == USART_Parity_Even) || \
                                                                 ((PARITY) == USART_Parity_Odd))
                                                                 
        f.串口模式选择:USART_Mode
                #define USART_Mode_Rx                        ((uint16_t)0x0004)
                #define USART_Mode_Tx                        ((uint16_t)0x0008)
                #define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFF3) == 0x00) && ((MODE) != (uint16_t)0x00))
                如果要选择全双工通信,那么接受模式和发送模式都要选择
       
        g.是否使用硬件流:USART_Hardware_Flow_Control
                #define USART_HardwareFlowControl_None       ((uint16_t)0x0000)
                #define USART_HardwareFlowControl_RTS        ((uint16_t)0x0100)
                #define USART_HardwareFlowControl_CTS        ((uint16_t)0x0200)
                #define USART_HardwareFlowControl_RTS_CTS    ((uint16_t)0x0300)
                #define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\
                                                                          (((CONTROL) == USART_HardwareFlowControl_None) || \
                                                                           ((CONTROL) == USART_HardwareFlowControl_RTS) || \
                                                                           ((CONTROL) == USART_HardwareFlowControl_CTS) || \
                                                                           ((CONTROL) == USART_HardwareFlowControl_RTS_CTS))
                一般情况下,如果不使用
               
13.串口接收数据,触发中断的方式
        调用函数USART_ITConfig(参数1, 参数2, 参数3);//参数有三个
        参数1:选择第几个串口 UART1 OR UART2 OR UART3 ----
       
        参数2:选择中断的方式
                          * @param  USART_IT: specifies the USART interrupt source to check.
                          *   This parameter can be one of the following values:
                          *     @arg USART_IT_CTS:  CTS change interrupt (not available for UART4 and UART5)
                          *     @arg USART_IT_LBD:  LIN Break detection interrupt
                          *     @arg USART_IT_TXE:  Tansmit Data Register empty interrupt
                          *     @arg USART_IT_TC:   Transmission complete interrupt
                          *     @arg USART_IT_RXNE: Receive Data register not empty interrupt
                          *     @arg USART_IT_IDLE: Idle line detection interrupt
                          *     @arg USART_IT_ORE:  OverRun Error interrupt
                          *     @arg USART_IT_NE:   Noise Error interrupt
                          *     @arg USART_IT_FE:   Framing Error interrupt
                          *     @arg USART_IT_PE:   Parity Error interrupt
                        本次选择的是USART_IT_RXNE,接收到数据就触发中断
       
        参数3:开启或者关闭
               
14.开启串口
        USART_Cmd(USART1, ENABLE);
       
15.对串口中断的优先级做配置
        1.定义一个结构体
       
16.A8:
        CPU: 三星S5pc100
        内存:256M
        FLASH:256M
       
17.LINUX系统的启动步骤
        a.运行uboot,初始化硬件,引导系统内核的加载
       
        b.内核的运行 (zImage, Linux)
       
        c.识别文件系统 NTFS(C盘,D盘) 是rootfs.tgz 文件系统
       
        系统 = 内核 + 文件系统
       
18.挂载系统
        要对uboot环境信息进行设置
        拨码开关拨到0000,选择UBOOT的启动方式       
                ipaddr = 192.168.1.100
                serverip = 192.168.1.200
               
19.拖动Zimage
        解压命令 sudo tar -xvf rootfs.tgz
       
20.修改Ubuntu的IP地址
        找到WIFI图标,选中edit connection

谢谢大家的分享。

小编 我才报的班  谢谢分享

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top