# flash LED #1 using inline assembler# this version is overly verbose and uses word stores@micropython.asm_thumbdef flash_led(r0):movw(r1, (stm.GPIOA + stm.GPIO_BSRRL) & 0xffff)movt(r1, ((stm.GPIOA + stm.GPIO_BSRRL) >> 16) & 0x7fff)movw(r2, 1 << 13)movt(r2, 0)movw(r3, 0)movt(r3, 1 << 13)b(loop_entry)label(loop1)# turn LED onstr(r2, [r1, 0])# delay for a bitmovw(r4, 5599900 & 0xffff)movt(r4, (5599900 >> 16) & 0xffff)label(delay_on)sub(r4, r4, 1)cmp(r4, 0)bgt(delay_on)# turn LED offstr(r3, [r1, 0])# delay for a bitmovw(r4, 5599900 & 0xffff)movt(r4, (5599900 >> 16) & 0xffff)label(delay_off)sub(r4, r4, 1)cmp(r4, 0)bgt(delay_off)# loop r0 timessub(r0, r0, 1)label(loop_entry)cmp(r0, 0)bgt(loop1)# flash LED #2 using inline assembler# this version uses half-word sortes, and the convenience assembler operation 'movwt'@micropython.asm_thumbdef flash_led_v2(r0):# get the GPIOA address in r1movwt(r1, stm.GPIOA)# get the bit mask for PA14 (the pin LED #2 is on)movw(r2, 1 << 14)b(loop_entry)label(loop1)# turn LED onstrh(r2, [r1, stm.GPIO_BSRRL])# delay for a bitmovwt(r4, 5599900)label(delay_on)sub(r4, r4, 1)cmp(r4, 0)bgt(delay_on)# turn LED offstrh(r2, [r1, stm.GPIO_BSRRH])# delay for a bitmovwt(r4, 5599900)label(delay_off)sub(r4, r4, 1)cmp(r4, 0)bgt(delay_off)# loop r0 timessub(r0, r0, 1)label(loop_entry)cmp(r0, 0)bgt(loop1)flash_led(5)flash_led_v2(5)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。