《嵌入式实验与实践教程-基于STM32与Proteus》课件-第四章_第1页
《嵌入式实验与实践教程-基于STM32与Proteus》课件-第四章_第2页
《嵌入式实验与实践教程-基于STM32与Proteus》课件-第四章_第3页
《嵌入式实验与实践教程-基于STM32与Proteus》课件-第四章_第4页
《嵌入式实验与实践教程-基于STM32与Proteus》课件-第四章_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Proteus仿真软件1认识MDK-ARM2调试STM323基础实例4目录Contents创新设计实例6综合设计实例5基础实例PART044.1呼吸灯实例

1.实例要求在STM32F103R6的PC0引脚上外接一个D1发光二极管,实现呼吸灯显示效果。2.硬件电路硬件仿真电路如图4-1所示。U1(STM32F103R6)的PC0引脚通过限流电阻R1(100欧)驱动D1发光二极管的亮灭。图4-1呼吸灯实例电路仿真原理图4.1呼吸灯实例

3.程序设计根据实例要求,设计的程序如右:4.实例总结本实例展示了如何用软件模拟产生呼吸灯显示的效果,程序中,Flag用于控制D1灯的从灭到亮还是从亮到灭的方向。要实现比较好的呼吸灯的显示效果,一个完整的亮灭的周期控制在40ms左右,从灭到亮和从亮到灭分别占用20ms,并将每个20ms时间分成200份,每份大约占用100us时间,其中亮的时间通过uNum

变量来控制,这样就可以控制D1灯的亮灭的呼吸灯的显示效果。4.

2单个LED数码管显示0~9实例

1.实例要求STM32F103R6的GPIOC端口的PC0~PC7引脚驱动一个共阳极LED数码管,实现在LED数码管上循环显示数字0~9。2.硬件电路硬件仿真电路如图4-2所示。U1(STM32F103R6)的PC0~PC7引脚通过RN1(100欧)限流排阻连接到共阳极LED数码管的笔段A~H。图4-2单个LED数码管显示0~9实例电路仿真原理图4.

2单个LED数码管显示0~9实例

3.程序设计根据实例要求,设计的程序如右:4.实例总结本实例展示了STM32F103R6器件如何驱动共阳LED数码管显示笔段码,在使用GPIOC端口引脚驱动时需将PC0~PC7引脚配置为输出,程序中将要显示的0~9的笔段码按着顺序放置在LEDSEG[]数组。通过for循环将LEDSEG数组中的内容按顺序送到GPIOC端口的PC0~PC7引脚上就能驱动在LED数码管显示内容。4.30~99按键计数显示实例

1. 实例要求在STM32F103R6的GPIOC端口的PC2~PC9引脚驱动2位共阴极LED数码管的笔段,PC10~PC11驱动2位共阴LED数码管的位选段,PC12连接着按键K1,当K1按下时计数加1,实现在2位共阴极LED数码管上显示100以内的按键计数值。2. 硬件电路硬件仿真电路如图4-3所示。U1的PC2~PC9引脚通过RN1限流电阻(100欧)来驱动2位共阴极LED数码管的笔段。U1的PC10~PC11引脚直接驱动2位共阴极LED数码管的位选段。U1的PC12引脚连接着按键K1。图4-30~99按键计数显示实例电路仿真原理图4.30~99按键计数显示实例

3.程序设计根据实例要求,设计的程序如下:4.实例总结本实例展示了STM32F103R6如何驱动动态LED数码管显示多位数的编程方法,程序中变量LEDCnt的计数方式用于动态LED数码管刷新延时作用,当LEDCnt计数到指定的数值时,则程序输出下一个显示缓冲区的笔段到指定的端口引脚上驱动LED数码管显示。变量LEDIndex则是用于指示当前显示哪个缓冲区的内容。通过库函数的GPIO_ReadInputDataBit()函数读取按键K1的状态,当按键K1按下时,读取PC12引脚的电平应为低电平。程序通过判断PC12的电平状态实现按键计数变量KeyCnt加1,并将KeyCnt变量的数值各个位分开装入显示缓冲区LEDBuffer中。4.30~99按键计数显示实例

4.4基于计数方式实现去抖动的按键计数显示实例

1.实例要求在STM32F103R6的GPIOA端口的PA4~PA11引脚驱动4位共阴LED数码管的笔段,PA12~PA15驱动4位共阴LED数码管的位选段,PB0和PB1分别连接着按键K1和K2,当K1按下时计数加1,当K2按下时计数减1,实现在4位共阴LED数码管上显示10000以内的按键计数值。2. 硬件电路硬件仿真电路如图4-4所示。U1(STM32F103R6)的GPIOA端口引脚PA4~PA11驱动四位共阴LED数码管的笔段A~G,DP,PA12~PA15驱动四位共阴LED数码管的位选段1~4,按键K1和K2分别连接到GPIOB端口引脚的PB0和PB1引脚上,电阻R1和R2为按键K1和K2的上拉电阻。图4-4基于计数方式实现去抖动的按键计数显示实例电路仿真原理图4.4基于计数方式实现去抖动的按键计数显示实例

3.程序设计根据实例要求,设计的程序如下:4.4基于计数方式实现去抖动的按键计数显示实例

4. 实例总结本实例展示了在按键识别过程中,采用变量计数的方式来达到按键去抖动,同时也将该变量作为键已按下的标志,实现一个变量多功能的方法。例如定义的变量K1_Cnt,其执行步骤如下:(1)判断键是否按下;(2)若检测到键已按下,判断是否为已按下的标志,这里的标志是K1_Cnt被置为特殊值“999999”;(3)若不是已按下的标志,则该变量(K1_Cnt)加1,并判断是否达设定的计数值M;(4)若该变量(K1_Cnt)已达到设定的值M,则判断该键是否真得按下;(5)若该键是真得被按下了,则置该变量K1_Cnt为特殊值“999999”,这个特殊值一定要大于M,并执行相应的键处理事件;(6)其他的情况下,只需判断键是否已释放,若已释放则将该变量K1_Cnt置0。(7)通过设置一个变量既作为计数又作为标志,可以有效提高CPU处理效率。4.5外部中断方式的加减计数实例

1.实例要求STM32F103R6的GPIOC端口的PC0~PC11驱动四位共阴LED数码管笔段和位选段,GPIOA端口PA0和PA1引脚外接按键K1和K2,用外部中断方式实现按键计数的加1和减1操作,并通过LED数码管显示。2.硬件电路硬件仿真电路如图4-5所示。U1(STM32F103R6)的GPIOC端口的PC0~PC7引脚连接到4位共阴LED数码管的笔段A~G和DP引脚上,用于驱动LED的笔段码;U1(STM32F103R6)的GPIOC端口的PC8~PC11用于直接驱动4位共阴LED数码管的位选段“1234”引脚。按键K1和K2分别连接到GPIOA端口的PA0和PA1引脚上,按下触发计数加1或减1计数。图4-5外部中断方式的加减计数实例电路仿真原理图4.5外部中断方式的加减计数实例

3.程序设计根据实例要求,设计的程序如下:4.5外部中断方式的加减计数实例

4. 实例总结本实例展示了如何实现引脚中断功能。本实例中用到的是GPIOA端口PA0和PA1作为外部中断源输入引脚,在使用之前,需要对相关寄存器初始化,初始化的内容描述如下:(1)要指定哪些是作为中断功能的输入引脚;(2)指定触发中断的边沿方式:上升沿、下降沿还是下升沿和下降沿;(3)对应引脚的中断功能使能;(4)开NVIC的中断向量号,对于PA0引脚的EXTI0线的中断向量号是EXTI0_IRQn,PA1引脚复用的EXTI1线的中断向量号是EXTI1_IRQn。在使用中断功能时,程序中必须要配套有对应的中断函数。本实例是EXTI0线的外部中断,则中断函数为“voidEXTI0_IRQHandler(void)”,EXTI1线的外部中断函数为“voidEXTI1_IRQHandler(void)”。在中断服务程序中,通过EXTI_ClearITPendingBit()函数清除相应的外部中断线的标志。4.64X4矩阵键盘读取实例

1.实例要求在STM32F103R6的GPIOB端口外接一个4X4矩阵键盘,GPIOA端口外接四位共阴极的LED数码,实现16个按键值和键码的识别并将按键键值和编码显示在LED数码管上。2.硬件电路硬件仿真电路如图4-6所示。U1(STM32F103R6)的GPIOA端口引脚PA4~PA11连接四位共阴LED数码管的笔段A~G,DP引脚,PA12~PA15引脚连接到四位共阴LED数码管的位选段1~4引脚。按键K1~K16构成4X4矩阵键盘的行线连接到U1(STM32F103R6)的GPIO端口引脚的PB0~PB3,列线连接到GPIOB端口引脚的PB4~PB7,电阻R1~R8为4X4矩阵键盘的行线和列线的上拉电阻。图4-64X4矩阵键盘读取实例电路仿真原理图4.64X4矩阵键盘读取实例

3.程序设计根据实例要求,设计的程序如下:4.64X4矩阵键盘读取实例

4.实例总结本实例展示了STM32F103R6与4X4矩阵键盘接口的硬件连接和按键识别的程序实现方法。在程序中,采用行列交换法来识别4X4矩阵键盘的每个按键。其实现步骤如下:(1)先置连接在4个行线的PB0~PB3引脚为输出方向且输出全为低电平,连接在4个列线的PB4~PB7为输入方向;(2)读取GPIOB端口的PB4~PB7引脚的电平状态,若等于“F0”,表示没有键按下;(3)若不等于“F0”,表示有键按下,去抖动之后;(4)若真得不等于“F0”,则表示真得的有键按下;置键已按下标志,并保存这个时刻的PB4~PB7引脚电平状态值;(5)将行和列的输入/输出方向进行交换,即行被设置为输入方向,列被设置为输出方向且输出全为低电平;并读取这个时刻的PB0~PB3引脚电平状态值和刚才保存的值进行合并,就形成了该按键的编码值;(6)根据按键的编码值在KEYTAB[]表中查找,并找到对应该编码值的序号即可;(7)若按键释放了,则将已按下标志置0。4.7定时器TIM1中断方式实现LED数码动态显示实例

1.实例要求利用STM32F103R6的定时器TIM1实现1ms的定时中断,并驱动四位共阴LED数码管的动态显示刷新,每100ms自动计数加1并显示在数码管上。2.硬件电路硬件仿真电路如图4-7所示。U1(STM32F103R6)的GPIOC端口引脚PC0~PC7驱动四位共阴LED数码管的笔段引脚A~G,DP,引脚PC8~PC11驱动四位共阴LED数码管位选段1~4。图4-7定时器TIM1中断方式实现LED数码动态显示实例电路仿真原理图4.7定时器TIM1中断方式实现LED数码动态显示实例

3.程序设计根据实例要求,设计的程序如下:4.实例总结本实例展示了STM32F103R6的定时器TIM1产生0.5ms的定时中断,将每0.5ms刷新LED数码管显示事件程序段放在定时中断函数中处理,同时定时中断函数还完成一个每0.1秒时到计数值自动加1,并将计数的结果送到LEDBuffer显示缓冲区。对于0.1秒的定时时间的产生,程序中定义一个Time100mSCnt变量,每当0.5ms的定时中断函数执行一次,Time100mSCnt变量就会自动加1一次,加到200

次即为0.1秒的时间产生。4.8定时器TIM2实现的硬PWM实例

1.实例要求利用STM32F103R6的定时器TIM2的比较输出功能,实现频率为1KHz的占空比可调的硬PWM信号由PB10复用的TIM2_CH3功能引脚输出。连接在PA8和PA9引脚上的按键K1和K2用于调节硬PWM信号的占空比数值,K1用于占空比增调节,K2用于占空比的减调节。STM32F103R6的GPIOC端口用于驱动四位共阴LED数码管显示硬PWM的占空比数值。4.8定时器TIM2实现的硬PWM实例

2.硬件电路硬件仿真电路如图4-8(a)所示。U1(STM32F103R6)的GPIOC端口引脚PC0~PC7驱动四位共阴LED数码管的笔段引脚A~G,DP,引脚PC8~PC11驱动四位共阴LED数码管位选段1~4。GPIOA端口的PA8和PA9引脚外接按键K1和K2,电阻R1和R2为按键K1和K2的上拉电阻,GPIOB端口的PB10引脚输出定时器TIM2的CH3通道的PWM信号到虚拟示波器的A通道。图4-8(a)定时器TIM2实现的硬PWM实例

电路仿真原理图4.8定时器TIM2实现的硬PWM实例

3.

程序设计根据实例要求,设计的程序如下:4.8定时器TIM2实现的硬PWM实例

4.实例总结本实例展示了如何利用STM32F103R6的定时器TIM2的比较输出功能产生PWM信号由复用在PB10引脚上的TIM2_CH3通道输出。需要对PB10做如下配置:(1)RCC_APB2PeriphClockCmd()函数使能GPIOB和AFIO外设时钟。(2)GPIO_PinRemapConfig()函数设置定时器TIM2的CH通道引脚映射。(3)通过配置GPIO_InitTypeDef结构体成员将PB10/TIM2_CH3配置为复用功能推挽输出模式,并GPIO_Init()函数完成PB10的配置。利用定时器TIM2产生PWM信号,则需要做如下配置:(1)利用TIM2的时基单元配置PWM信号的周期。由于仿真时钟为8MHz,当TIM_TimeBaseInitTypeDef结构体成员Prescaler的分频系数设置为8时,加载到CNT计数器的时钟为1MHz,当配置TIM2为向上计数方式时,从0计数到1000即为1ms定时。通过调用TIM_TimeBaseInit()函数完成定时器TIM2的时基单元配置。(2)调用TIM_Cmd()函数使能TIM2开始工作。4.8定时器TIM2实现的硬PWM实例

(3)通过配置TIM_OCInitTypeDef结构体成员完成对PWM输出模式选择、占空比的设定、正常以及反向输出使能或禁止等信息,并调用TIM_OC3Init()函数完成PWM信号CH3的输出配置。(4)调用TIM_CtrlPWMOutputs()函数使能PWM信号输出到引脚。由于定时器TIM2的时基单元产生的是1ms周期,这时将定时器TIM2的溢出中断使能,作为定时刷新动态LED数码管时间,每1ms时间到执行TIM2_IRQHandler()中断服务程序中数码管动态扫描程序。定义的PWMPulse变量用于设置PWM信号的占空比,通过TIM_SetCompare3()函数实现动态改变CCR3寄存器的内容,即对应着占空比数值。该数值一定要小于TIM_TimeBaseInitTypeDef结构体的Period成员数值。定时器TIM2_CH3通道输出的PWM的波形图如图4-8(b)所示。图4-8(b)定时器TIM2_CH3/PB10引脚输出的PWM4.9定时器TIM3测量信号频率实例

1.

实例要求利用STM32F103R6定时器TIM3的捕获功能实现从PC6/TIM3_CH1通道输入的信号进行频率的测量,并通过由GPIOA

端口共同连接驱动的4位共阴LED数码管上显示该数值。2.

硬件电路硬件仿真电路如图4-9(a)所示。U1(STM32F103R6)的GPIOB端口的PB0~PB7引脚连接到四位共阴LED数码管的笔段A~G,DP引脚,PB8~PB11引脚连接到四位共阴LED数码管的位选1~4引脚,信号发生器产生的信号由PC6/TIM3_CH1通道输入。图4-9(a)定时器TIM3测量信号频率实例电路仿真原理图4.9定时器TIM3测量信号频率实例

3.

程序设计根据实例要求,设计的程序如下:4.9定时器TIM3测量信号频率实例

4.

实例总结本实例展示了如何应用STM32F103R6定时器TIM3的CH1通道的输入捕获功能用于测量外部输入信号的频率。首先要对复用PC6引脚上的TIM3_CH1复用功能进行如下配置:(1)利用RCC_APB2PeriphClockCmd()函数开启GPIOC和AFIO外设时钟。(2)GPIO_PinRemapConfig()函数实现TIM3_CH1复用功能的引脚映射。(3)利用GPIO_InitTypeDef结构体将PC6引脚配置为浮空输入模式,并用GPIO_Init()函数完成PC6的配置。其次配置定时器TIM3的输入捕获功能,应做如下配置:(1)配置TIM3的时基单元的时钟频率设置为1MHz进行计数,即每1us计数一次,由于仿真的主时钟为8MHz,因此将TIM_TimeBaseInitTypeDef结体的成员的Prescaler值设置为8,进行8分频后,加载到TIM3定时器的时钟频率即为1MHz,接着设置TIM_TimeBaseInitTypeDef结体的成员的Period值为最大值0Xffff,即最大计数设定值,同时设置定时器TIM3的计数方式,最后通过调用TIM_TimeBaseInit()函数完成定时器TIM3的时基单元的配置。4.9定时器TIM3测量信号频率实例

(2)接着继续配置定时器TIM3的输入捕获结构体TIM_ICInitTypeDef成员信息,将成员TIM_Channel配置为定时器TIM3的CH1通道,配置TIM_ICPolarity成员为一种边沿检测方式(本实例选择上升沿),通过TIM_ICSelection设置信号输入来源外部,TIM_ICPrescaler成员完成分频系数的设定等。(3)利用TIM_Cmd()函数开启TIM3工作,并利用TIM_ITConfig()函数开启输入捕获中断,同时还要配置NVIC控制器,将TIM3_IRQn向量中断开启并配置优先级。当产生了输入捕获中断,在TIM3_IRQHandler()中断函数中,通过TIM_GetITStatus()函数读取TIM_IT_CC1位的中断状态为“1”时执行相应的处理。通过两次上升沿捕获中断读取定时器TIM3的CCR1寄存器的时刻值,并计算两者之间的差值,即为当前信号的一个周期内时间。主程序中while(1)中不停时根据OKFlag标志来计算当前时间差值并转换为频率数值通过LED数码管显示。程序中定时器TIM2用于产生1ms的定时时间用于动态扫描驱动LED数码管显示之用。虚拟信号发生器产生信号的输入如图4-9(b)所示。图4-9(b)信号发生器产生的信号频率和幅值4.10USART1实现的字符串发送实例

1.实例要求利用STM32F103R6的USART1的PA9/USART1_TX引脚功能将“UartTest”字符串发送到串口虚拟终端上显示,波特率为9600。2.

硬件电路硬件仿真电路如图4-10(a)所示。图4-10(a)USART1实现的字符串发送实例电路仿真原理图4.10USART1实现的字符串发送实例

3.

程序设计根据实例要求,设计的程序如下:4.

实例总结串口虚拟终端显示的结果如图4-10(b)所示。图4-10(b)USART1实现的字符串发送实例串口虚拟终端显示4.10USART1实现的字符串发送实例

本实例展示了STM32F103R6微控制器的USART功能的使用方法。在正确使用之前,需要对USART进行初始化,初始化主要内容如下:(1)调用RCC_APB2PeriphClockCmd()函数开启AFIO和GPIOA外设时钟。(2)通过GPIO_InitTypeDef结构体配置PA9为复用推挽输出模式等信息。(3)调用GPIO_Init()函数完成PA9的配置。(4)调用RCC_APB2PeriphClockCmd()函数开启USART1外设时钟。(5)通过USART_InitTypeDef结构体完成USART配置信息的设定,包括波特率、数据位、停止位等。(6)开启发送功能。(7)打开USART1外设让其工作。通过USART_SendData()函数实现数据的串口发送,数据是否发送完毕,通过USART_GetFlagStatus()函数读取USART_FLAG_TC标志是否为“1”。若为“1”则发送完毕,利用USART_ClearFlag()函数将该标志位清“0”。4.11中断方式的USART2发送接收实例

1.

实例要求STM32F103R6的RXD和TXD连接到串口虚拟终端,由虚拟终端发送来的字符0~9,A~F通过共阳LED数码管显示,按键K1加1计数的值送到串口虚拟终端上显示。串口波特率9600b/s。2.

硬件电路硬件仿真电路如图4-11(a)所示。U1(STM32F103R6)的PA2/USART2_TX和PA3/USART2_RX引脚连接到串口虚拟终端的RXD和TXD引脚。PC4~PC10引脚驱动共阳LED数码管的笔段A~G引脚,按键K1连接在PC11引脚。图4-11(a)中断方式的USART2发送接收实例电路仿真原理图4.11中断方式的USART2发送接收实例

3.

程序设计根据实例要求,设计的程序如下:4.

实例总结本实例的串口虚拟终端显示的结果如下:图4-11(b)中断方式的USART2发送接收实例串口虚拟终端显示4.11中断方式的USART2发送接收实例

本实例展示了如何使用STM32F103R6的USART2串口中断方式来发送和接收数据。USART2串口初始化步骤如下:(1)配置USART2的串口引脚。调用RCC_APB2PeriphClockCmd()函数开启AFIO和GPIOA外设时钟,将复用PA2引脚上的USART2_TX复用引脚配置为复用功能推挽输出模式,将复用在PA3引脚上的USART2_RX复用引脚配置为浮空输入模式,并通过调用GPIO_Init()完成引脚的配置。(2)调用RCC_APB1PeriphClockCmd()函数打开USART2外设时钟。(3)设置USART_InitTypeDef结构体成员信息,包括数据位、停止位、奇偶校验位、波特率、握手协议、发送接收模式等,调用USART_Init()函数完成USART2的信息配置。(4)要用中断方式,则调用USART_ITConfig()函数使能串口发送中断和串口接收中断。(5)调用USART_Cmd()函数开启USART2外设工作。由于使用串口中断方式,还要配置NVIC的USART2_IRQn通道,抢占优先级和响应优先级等信息,调用NVIC_Init()函数完成NVIC的初始化。在USART2_IRQHandler()中断服务程序中,通过USART_GetITStatus()函数分别读取串口发送完成和接收完成中断标志判断是否继续下一个发送或当前是否正确接收等处理。4.12SPI接口的串并转换LED数码管显示实例

1.

实例要求利用STM32F103R6的SPI1外设驱动两片74HC595串并转换芯片实现在四位共阴LED数码管上显示按键加减计数。2.

硬件电路硬件仿真电路如图4-12所示。U1(STM32F103R6)的PA5/SPI1_SCK引脚连接到U2和U3的SH_CP引脚,PA7/SPI1_MOSI引脚到U2的DS引脚,U2的Q0~Q7分别连接到四位共阴LED数码管的笔段A~G,DP引脚,U3的Q0~Q3分别连接到四位共阴LED数码管的位选段1~4。按键K1和K2分别连接到U1(STM32F103R6)的PA11和PA12引脚,电阻R1和R2为按键K1和K2的上拉电阻。图4-12SPI接口的串并转换LED数码管显示实例电路仿真原理图4.12SPI接口的串并转换LED数码管显示实例

3.

程序设计根据实例要求,设计的程序如下:4.12SPI接口的串并转换LED数码管显示实例

4. 实例总结本实例展示了如何应用STM32F103R6的SPI1外设实现串/并转换并驱动四位共阴LED数码管动态显示。关键要对SPI1进行做如下步骤的正确的配置:(1)SPI1的SCK和MOSI复用引脚的配置。应用RCC_APB2PeriphClockCmd()函数开启AFIO和GPIOA外设时钟,同时应用GPIO_Init()函数完成对复用在PA5和PA7引脚上的SPI1_SCK和SPI1_MOSI的复用功能配置。(2)配置SPI1外设。用RCC_APB2PeriphClockCmd()函数打开SPI1外设的时钟,配置初始化SPI外设的SPI_InitTypeDef结构体成员信息,包括通信方式、数据位、主/从模式、SCK时钟极性和相位、波特率、高位在前还是低位在前等。调用SPI_Init()函数完成SPI1外设的初始化。(3)调用SPI_Cmd()函数使能SPI1外设工作。(4)通过SPI_I2S_SendData()函数实现SPI串口的数据发送,SPI_I2S_ReceiveData()函数实现SPI串口的数据接收。在启动发送之后,需要通过SPI_I2S_GetFlagStatus()函数读取SPI的忙标志位用于表示当前数据是否发送或接收完毕。main主程序的while(1)无限循环中实现LED数码管的动态显示刷新(通过SPI串口将数据送到外部的74HC595)和按键K1和K2的识别处理任务。4.13I2C接口的24C02串行存储器读写实例

1. 实例要求利用STM32F103R6的GPIO引脚模拟I2C串行总线通信接口协议与外接一个24C02的串行存储器通信,实现对该存储器的读和写操作。2. 硬件电路硬件仿真电路如图4-13(a)所示。U1(STM32F103R6)的PB6和PB7引脚连接到U2(24C02)的SCK和SDA引脚,电阻R1和R2为I2C总线上的上拉电阻。GPIOA端口PA0~PA7引脚分别连接到四位共阴LED数码管的笔段引脚A~G,DP,PA8~PA11引脚分别连接到四位共阴LED数码管的位选段1~4引脚。图4-13(a)I2C接口的24C02串行存储器读写实例电路仿真原理图4.13I2C接口的24C02串行存储器读写实例

3.

程序设计根据实例要求,设计的程序如下:4. 实例总结本实例展示了如何利用STM32F103R6的GPIO引脚实现I2C串行总线协议的模拟。实测的数据如图4-13(b)所示。图4-13(b)I2C接口的24C02串行存储器读写实例

的I2C调试器监测的数据4.13I2C接口的24C02串行存储器读写实例

程序中,模拟I2C协议的方法如下:(1)打开GPIOB外设时钟并配置PB6和PB7引脚为通用开漏模式。(2)模拟I2C的START启动信号;置SDA为输出,先拉低SDA线,再拉低SCL线。(3)模拟I2C的STOP停止信号;先SDA为输出,先置SDA为低电平,再将SCL置高电平,最后置SDA为高电平。(4)I2C字节写,先将SDA线置为输出,产生8个SCL周期的写时钟并在每个SCL为低电平时将数据线SDA状态置好。(5)I2C字节读,先将SDA线置为输入,产生8个SCL周期的读时钟并在每个SCL时钟周期下读取数据线SDA的状态。(6)读从机的应答信号;先将SDA线置输入,置SCL为高电平,读取SDA线状态后将SCL线置低电平。(7)写从机的应答或应答非信号;先将SDA线置输出,若是应答信号则将SDA线置低电平,应用非信号则将SDA线置高电平后将SCL线拉低。4.14查询方式的A/D转换应用实例

1. 实例要求利用STM32F103R6的内置12位A/D转换器ADC1将接在PA0/ADC1_AIN0通道上的模拟量转换为数字量在LED数码管上显示。2. 硬件电路硬件仿真电路如图4-14所示。U1(STM32F103R6)的PA0/ADC1_AIN0引脚外接一个可调电位器RV1,电压可在0~VDD之间调节。GPIOC端口的PC0~PC7引脚分别连接六位共阴LED数码管的笔段A~G,DP引脚,PC8~PC13分别连接在六位共阴LED数码管的位选段1~6引脚。图4-14查询方式的A/D转换应用实例

电路仿真原理图4.14查询方式的A/D转换应用实例

3.

程序设计根据实例要求,设计的程序如下:4. 实例总结本实例展示STM32F103R6的A/D转换器的使用方法。在A/D转换器正确使用之前,需要对其进行配置,配置的步骤如下:(1)配置复用在GPIO引脚上的AD功能,打开该引脚的GPIO外设时钟,并配置该引脚为模拟输入通道。(2)打开AFIO外设和ADC1外设时钟。(3)通过RCC_ADCCLKConfig()函数配置ADC1时钟。4.14查询方式的A/D转换应用实例

(4)配置ADC_InitTypeDef结构体的各个成员信息,包括:工作模式、扫描方式、数据对齐方式、触发转换模式、连续转换功能、通道数等。再调用ADC_Init()函数完成ADC1的配置。(5)调用ADC_Cmd()函数使能ADC工作。(6)通过ADC_SoftwareStartConvCmd()函数启动ADC转换。读取A/D转换器的转换数据步骤如下:(1)启动A/D转换器AD转换之后。(2)通过ADC_GetFlagStatus()函数读取A/D转换结束标志(ADC_FLAG_EOC)来判断是否转换结束。(3)通过ADC_ClearFlag()函数清A/D转换结束标志。(4)调用ADC_GetConversionValue()函数读取A/D转换结束的数据。(5)最后进行数据处理或用于显示等。(6)通过ADC_RegularChannelConfig()重新配置ADC,并启动ADC转换开始下一轮转换。4.15中断方式的多路A/D转换应用实例

1. 实例要求利用STM32F103R6的ADC中断方式实现从PA0/AIN0和PA1/AIN1通道输入的0~VDD的模拟量进行A/D转换,在LM016L液晶上显示。2. 硬件电路硬件仿真电路如图4-15所示。可调节电位器RV1和RV2的可调端分别连接在U1(STM32F103R6)的PA0和PA1引脚。GPIOC端口的PC0~PC7连接到LCD1(LM016L)的D0~D7引脚,PC8连接到RS引脚,PC9连接到EN引脚。图4-15中断方式的多路A/D转换应用实例电路仿真原理图4.15中断方式的多路A/D转换应用实例

3.

程序设计根据实例要求,设计的程序如下:4.15中断方式的多路A/D转换应用实例

4. 实例总结本实例展示了如何利用STM32F103R6的A/D中断方式进行A/D转换。具体的配置应按如下的步骤进行配置:(1)配置模拟通道的GPIO引脚。打开相应GPIO的外设时钟,并配置对应的GPIO引脚为模拟输入方式。(2)打开AFIO外设时钟和ADC1外设时钟,并配置ADC1的AD时钟。(3)配置ADC_InitTypeDef结构体成员信息。主要包括:工作模式、扫描方式、外部触发方式、数据对齐方式、通道数等信息。通过ADC_Init()函数完成配置。(4)通过ADC_ITConfig()函数开启ADC1转换结束中断请求。(5)使能ADC1工作,利用ADC_RegularChannelConfig()函数设置要转换的通道、采样时间等,并启动ADC1转换开始。(6)配置NVIC控制器的ADC1_2_IRQn中断向量。(7)在voidADC1_2_IRQHandler(void)中断函数中编写ADC1转换中断服务程序。4.16定时器TIM1的PWM生成100Hz正弦波应用实例

1. 实例要求利用STM32F103R6的16位定时器TIM1的PWM功能产生100Hz正弦波信号由PA7/TIM1_CH1N引脚输出,外接虚拟示波器观察波形。2. 硬件电路硬件仿真电路如图4-16(a)所示。图4-16(a)定时器TIM1的PWM生成100Hz正弦波应用实例电路仿真原理图4.16定时器TIM1的PWM生成100Hz正弦波应用实例

3.

程序设计根据实例要求,设计的程序如下:4. 实例总结本实例通过虚拟示波器观察到的波形如图4-16(b)所示。绿色线为输出频率为100Hz的正弦信号,黄色线输出频率为10KHz的PWM信号。图4-16(b)虚拟示波器观察到的PWM和100Hz正弦信号4.16定时器TIM1的PWM生成100Hz正弦波应用实例

本实例展示了如何利用定时器TIM1的PWM功能产生正弦信号。对于占空比是固定值的PWM信号由PA7/TIM1_CH1N引脚输出时,经过R1和C1构成的低通滤波器,可以输出稳定的直流电压。当改变占空比时,经过低通滤波后的直流电压也会成线性地改变。利用该原理,在每个PWM周期内改变一次占空比,即可改变其经过低通滤波后的输出电压。若要产生频率为f的正弦信号,则要将正弦信号的周期细分为N个点,每个点所对应频率为N*f,该频率为PWM信号的频率,而该点所对应的正弦信号的幅度为该PWM信号的占空比值。本实例中,N=100,正弦信号的频率f=100Hz,则PWM信号的频率为10KHz。程序中,将定时器TIM1配置为产生PWM周期为100us的定时,同时初始化PWM模式相关配置信息。在TIM1_UP_IRQHandler中断函数中,每100us定时时间到通过TIM_SetCompare1()函数改变TIM1的PWM占空比数值即可。4.17基于GPIO的D/A转换多波形发生器应用实例

1. 实例要求利用STM32F103R6的GPIOC端口的PC0~PC7引脚驱动一个R-2R电阻网络,实现8位的D/A转换,产生三角波、正弦波和锯齿波等波形,通过虚拟示波器观察波形情况。2. 硬件电路硬件仿真电路如图4-17(a)所示。U1(STM32F103R6)的PC0~PC7引脚通过U2(74HCT573)驱动后分别连接到电阻R1~R16构成的R-2R电阻网络组成的8位D/A转换电路,电容C1起滤波作用。按键K1用于切换不同的波形,连接到PC9引脚。图4-17(a)基于GPIO的D/A转换多波形发生器应用实例电路仿真原理图4.17基于GPIO的D/A转换多波形发生器应用实例

3.

程序设计根据实例要求,设计的程序如下:4. 实例总结本实例通过虚拟示波器观察到的波形如图4-17(b)~(d)所示。图4-17(b)虚拟示波器观察到锯齿波图4-1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论