基于STM32实验开发板的设计编程.docx
嵌入式应用技术实验课基于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实验五基于互斥量的学生信息显示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毫秒(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.OCTPVT,LIGHT.OFF):ENABLE.INTERRUPTS;thd_redlight=rt_thread_create("redlght",(void*)thread_redlight,0.512.10.10):thd_greenlight=rt_thread_create<-green1;ghtvoid>thread_greenlight.0.512.10.10):thd_bluelight=rt_thread_create(biue1ight,",(void)thread-bluelight.0.512.10.10);rt_thread_startup<thd_redlight)delay-as<3000).rt_thread_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);PrintfmJ!rn*);函数名称:run_bIuelight函数返回,无参数说明,无功能概要:每3杪蓝灯反转内部调用,无/=voidthread_bluelight()(gpio_init(LIGHT_BLUE,GPIoJ)UTPSLIGHLoFF);while(l)gpio_reverse(LIGHT_BLUE);delay_ms<3000:延时3杪gpio_reverse(LIGHT_BLUE);delay_ms(6000);printf(*蓝灯也变i!rn");)voidthread_greenlight()函数名称: /函数返网, 参数说明: /功能概要: /内部调用, /=run_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(".1r<1.jil''i!rn*);(3)运行效果1.4 问答题(1)动态线程创建的具体在哪条语句上实现的。答:thd_redlight=rt_thread_crcate("redlight",(void*)thread-redlight,0,512,10,10);thd_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操作系统,线程都处于以下五种状态的其中一种(初始状态、就绪状态、运行状态、挂起状态、关闭状态),掌握了调用操作系统提供的接口函数,使线程在这五种状态中进行来回切换。实验二基于事件的开关控制小灯闪烁2.1 实验目的(1)理解事件的含义、应用场合以及常用函数。(2)掌握事件的编程步骤。(3)基于操作系统的线程和中断,用事件同步功能完成一个开关控制一个小灯的亮暗2.2 实验设备与器材电脑,AHL-STM32L431-WiFi核心板及其扩展板,导线,发光二极管,开关按钮,IOK电阻,万用表等2.3 实验内容用事件完成对小灯的控制,输入。小灯亮,输入1小灯灭(1)主函数体对于事件字和线程的创建以及启动include-includes,hvoidapp_init(void)rt_thread_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'.RT_IPCFLAG_PRIO):创建:色灯任程thd_redlight=rt_thread_create(redlight*,(void)thread-redlight.0.512.10.10)rt_thread_startup(thd.redlight):普动红灯线样(2)中断函数和组帧函数Sinclude'includes,h'uint8_tJrecvDate20:;口接收,:在政纲uint8-tCreateFrane(uint8-tData,uint8-t*buffer):÷H帧决数出明程序名称,UARTVserHandler触发条件IUART.User11<Jfl一个字灯触发备注,进入本程序后可使用Uarjgejre_int函数可再进行中断标志判断<ITfuART按收中斯.O-没仃UART接收中断)voidUART-UwejHandler(Void)(uint8.tch;DISABLE.IXTERRUPTS;,ch=gpio_get(SIITCH_CTRL);gpio_c1ear-int(SIITCH.CTRL):for(;)if(ch-,0,)uart_send_string(l,ART-User.void)'>',W÷Hj;1Arnrt_event_sendEventlord.LIGHT-ON>;(elseuart_send_string(VART_User.(void)"RhdJh'r=Ufl1rn'rt_event_send(Eventlord.LIGHTOFF);)ENABLE.INTERRUPTS:升息中断(3)红灯线程voidthread.redIighUuint32,trecvedstat;uart_send_string(UART_User.lvod','n",rt.eventrecv<Eventlord.LIGHT.ON,RT.BrENT.FLAG.ORRTEVEXLFLAGJuAR,RTJAI11XG-FOREVER.HecvKstatc:rt_event_recvEventlord.LIGHT.OFF.RT-Byr.FLG-ORRLEVENLFLALCLEAR,而JrAln定FOREVER,Hecv心tate:if(recvedstate-LICHTONl(uartsendstring(UART,Usr.(void>'',k'.<.r,',l,'."'I,<i'r'n,:gpio_set<LIGHT_RED.LIGHT.OX);反M红灯elseif(recvedstate-三LIGHT-OFF>uart-sndstring(UART-lser.(void*,:k,.,it1h,.1,<rn');gpio_set<LIGHT.RED.LIGKLoFF).殳转红灯(4)运行效果发送0,红灯亮。发送1,红灯暗接收1据设宇汽形式J十进制形式留口设串口选捺Wrt(一发送敷据;波特率选择无校蛉,8位数据位,】位停止位谪“入字符串!MiI W (V2.0) SD Armajfia关闭串口十六进制影式SUgAaaaaaaaaaaaaaaWWWWW lllFA串口号、浪特里:CO)E、115200发送数据设选珏发送方式字万的R口选捺