《基于STM32实验开发板的设计编程.docx》由会员分享,可在线阅读,更多相关《基于STM32实验开发板的设计编程.docx(22页珍藏版)》请在优知文库上搜索。
1、嵌入式应用技术实验课基于STM32实验开发板的设计编程目录实验一线程控制小灯轮闪31.1 实验目的31.2 实验设备与器材31.3 实验内容31.4 问答题51.5 实验心得5实验二基于事件的开关控制小灯闪烁62.1 实验目的62.2 实验设备与器材62.3 实验内容62.4 问答题82.5 实验心得9实验三基于消息队列的时钟显示IO3.1 实验目的IO3.2 实验设备与器材103.3 实验内容103.4 问答题Il3.5 实验心得12实验四基于信号量的ADC温度测量显示134.1 验目的134.2 实验设备与器材134.3 实验内容134.4 问答题144.5 实验心得15实验五基于互斥量的
2、学生信息显示165.1 实验目的165.2 实验设备与器材165.3 实验内容165.4 问答题175.5 实验心得18实验六基于RT-Thread的小区停车模拟管理系统196.1 实验目的196.2 实验设备与器材196.3 实验内容196.4 实验心得23实验一线程控制小灯轮闪1.1 实验目的(1)理解线程的含义、应用场合以及常用函数。(2)掌握线程的编程步骤。(3)创建一个新的线程,该线程通过引脚对小灯进行控制1.2 实验设备与器材电脑,AHL-STM32L431-WiFi核心板及其扩展板,导线,发光二极管,IOK电阻,万用表等1.3 实验内容用线程完成对三个小灯不断循环轮流显示3毫秒(
3、1)主函数体,创建线程和初始化变量后启动线程Sincludeincludes,h*voidapp_init(void)rt_thread_tthd.redlight.rt_thread_tthd_greenlight;rt_thread_tthd.bluelight;DISABLENTERRCpTS:printf(*川IPiJinit陶故.分别M始化红灯、纭灯、收灯rn):gpio_init(LIGHT_RED.GPIO,OCTPVT.LIGHT_OFF).gpio_init(LIGHT_GREEX.GPIO.OUTPUT,LIGHT_OFF)gpio,init(LIGHT.BLIE.GPIO
4、.OCTPVT,LIGHT.OFF):ENABLE.INTERRUPTS;thd_redlight=rt_thread_create(redlght,(void*)thread_redlight,0.512.10.10):thd_greenlight=rt_thread_createthread_greenlight.0.512.10.10):thd_bluelight=rt_thread_create(biue1ight,(void)thread-bluelight.0.512.10.10);rt_thread_startupthd_redlight)delay-as3000).rt_thr
5、ead_startup(thd_greenlight):delay-三s,3000):rt_thread_startup(thd_bluelight):(2)线程部分,完成每个线程不断循环/函数名称: /函数返网, 参数说明, 功能概要, 内部调用, /=run_redlight无无每3秒红灯反转无voidthread_redlight()gpio_init(LIGHT_RED.GPlOaPUTLIGHTJ)FF);while(l)gpio-reverse(LIGHT_RED);delay_ms(3000):/延时3杪gpio_reverse(LIGHT_RED);delay_ms(6000)
6、;PrintfmJ!rn*);函数名称:run_bIuelight函数返回,无参数说明,无功能概要:每3杪蓝灯反转内部调用,无/=voidthread_bluelight()(gpio_init(LIGHT_BLUE,GPIoJ)UTPSLIGHLoFF);while(l)gpio_reverse(LIGHT_BLUE);delay_ms3000:延时3杪gpio_reverse(LIGHT_BLUE);delay_ms(6000);printf(*蓝灯也变i!rn);)voidthread_greenlight()函数名称: /函数返网, 参数说明: /功能概要: /内部调用, /=run_
7、greenlight无无每1杪绿灯反转无gpio_init(LIGHT_GREEX.GPIO_OUTPUT,LIGHT_OFF):while(l)gpio_reverse(LIGHT_GREEN);delay_ms(3000);一完3杪gpio_reverse(LIGHT_GREEN);delay_ms(6000);灭6杪printf(.1r1.jili!rn*);(3)运行效果1.4 问答题(1)动态线程创建的具体在哪条语句上实现的。答:thd_redlight=rt_thread_crcate(redlight,(void*)thread-redlight,0,512,10,10);thd
8、_greenlight=rt_thread_create(greenlight,(void*)thread_greenlight,0,512,10,10);thd-b!uelight=rt-thread-create(,bluelight,(void*)thread_bluelight,0,512,10,10);(2)线程启动是否分动态和静态,具体实现在哪条语句上实现的。答:分,由rt_thread_create语句实现动态线程创建.1.5 实验心得通过本次实验对线程有了基础的概念,对于运行RrThread操作系统,线程都处于以下五种状态的其中一种(初始状态、就绪状态、运行状态、挂起状态、关闭
9、状态),掌握了调用操作系统提供的接口函数,使线程在这五种状态中进行来回切换。实验二基于事件的开关控制小灯闪烁2.1 实验目的(1)理解事件的含义、应用场合以及常用函数。(2)掌握事件的编程步骤。(3)基于操作系统的线程和中断,用事件同步功能完成一个开关控制一个小灯的亮暗2.2 实验设备与器材电脑,AHL-STM32L431-WiFi核心板及其扩展板,导线,发光二极管,开关按钮,IOK电阻,万用表等2.3 实验内容用事件完成对小灯的控制,输入。小灯亮,输入1小灯灭(1)主函数体对于事件字和线程的创建以及启动include-includes,hvoidapp_init(void)rt_thread
10、_tthd_redlight;Disablejnterwjpts:gpio.init(LIGHT-RED.GPIO.OUTPUT,LIGHT.OFF):gpio_init(SWITCH_CTRL,GPIO_INPUT,0);gpio_pull(SWITCH_CTRL.PULL_UP):gpio_enable_int(SIITCH_CTRL.RISING_EDGE):uart_init(UART_User,115200):uart_enab1e_re_int(UART_User):ENABLE_INTERRUPTS;创建M件字Eventlord=rt_event_create(EventWord
11、.RT_IPCFLAG_PRIO):创建:色灯任程thd_redlight=rt_thread_create(redlight*,(void)thread-redlight.0.512.10.10)rt_thread_startup(thd.redlight):普动红灯线样(2)中断函数和组帧函数Sincludeincludes,huint8_tJrecvDate20:;口接收,:在政纲uint8-tCreateFrane(uint8-tData,uint8-t*buffer):H帧决数出明程序名称,UARTVserHandler触发条件IUART.User11Jfl一个字灯触发备注,进入本程
12、序后可使用Uarjgejre_int函数可再进行中断标志判断,WHj;1Arnrt_event_sendEventlord.LIGHT-ON;(elseuart_send_string(VART_User.(void)RhdJhr=Ufl1rnrt_event_send(Eventlord.LIGHTOFF);)ENABLE.INTERRUPTS:升息中断(3)红灯线程voidthread.redIighUuint32,trecvedstat;uart_send_string(UART_User.lvod,n,rt.eventrecv,k.r,l,.I,irn,:gpio_setuart-sndstring(UART-lser.(void*,:k,.,it1h,.1,rn);gpio_setLIGHT.RED.LIGKLoFF).殳转红灯(4)运行效果发送0,红灯亮。发送1,红灯暗接收1据设宇汽形式J十进制形式留口设串口选捺Wrt(一发送敷据;波特率选择无校蛉,8位数据位,】位停止位谪“入字符串!MiI W (V2.0) SD Armajfia关闭串口十六进制影式SUgAaaaaaaaaaaaaaaWWWWW lllFA串口号、浪特里:CO)E、115200发送数据设选珏发送方式字万的R口选捺