通信网络
使用F4进行串口通信需要相关的配置。由于没带双头USB线,我采用串口3搭配CC2541蓝牙&WiFi模块进行透传串口开发。
根据资料所示,我需要进行下面几个步骤:
接着才能利用串口透传来调试。不过考虑到函数复用和避免日后重复造轮子的情况发生,我还是单独写成GPIO和串口的配置函数。因此我的流程如下:
本次使用的是串口3,涉及的GPIO是PB10和PB11.因此首先要设置这两个GPIO。
使能时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
设置引脚复用器映射:
GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_USART3);
分别复用了B10和B11。
接着初始化。具体代码在下文查看。
点亮LED(库函数
GPIO_Mode处需要设置复用功能GPIO_Mode_AF
,速度50MHZ即可,GPIO_OType设置推挽复用以得到更强的输出能力GPIO_OType_PP
,电平选择上拉。选择上拉是因为根据串口定义,TX和RX在空闲状态保持1。
首先用F4库函数提供的结构体声明:
USART_InitTypeDef USART_InitStructure;
接着使能时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
需要注意的是,根据芯片手册,串口1,6是挂在APB2上的,而2,3,4,5都是挂载在APB1上的,因此初始化时应当使用RCC_APB1函数而不是跟之前一样用APB2。
然后设置各项相关参数:
由于只影响到GPIO和串口的初始化,此处不过多占用篇幅。
这俩是什么玩意?网上查得如下:
AHB(Advanced High-performance Bus), 高速总线,用来接高速外设的。APB (Advanced Peripheral Bus) 低速总线,用来接入低速外设。
其实AHB总线非常简单。里面一个仲裁器(Arbiter)用于仲裁多个主设备同时访问总线的情况,三个多路选择器,用于选通master与slave之间的data和address。另外ADDR没有分读和写的ADDR,也就是说AHB不是全双工,读写是不可以同时进行的。所以性能上比AXI一般来讲要弱一些。
对于APB来说,就简单多了。主要用来读写寄存器。
主要包含
VScode代码提示也可以看出,APB下挂载了GPIO:
AHB也可以使用:
嵌套向量中断控制器;用于为中断分组,从而分配抢占优先级和响应优先级;
先占优先级也就是抢占优先级,概念等同于51单片机中的中断。假设有两中断先后触发,已经在执行的中断先占优先级如果没有后触发的中断 先占优先级更高,就会先处理先占优先级高的中断。也就是说又有较高的先占优先级的中断可以打断先占优先级较低的中断。这是实现中断嵌套的基础。
次占优先级,也就是响应优先级,只在同一先占优先级的中断同时触发时起作用,先占优先级相同,则优先执行次占优先级较高的中断。次占优先级不会造成中断嵌套。如果中断的两个优先级都一致,则优先执行位于中断向量表中位置较高的中断。
NVIC就是控制上述功能的控制器
全部0条评论
快来发表一下你的评论吧 !