华清远见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
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
谢谢大家的分享。
小编 我才报的班 谢谢分享