[Lua] 纯文本查看 复制代码
--以下快捷方式将显示在PC软件界面-------------
--F01=开始翻转,TeseFsmc()
print("STM32-V5 GPIO翻转程序 V1.0")
print("为避免主板程序影响")
print("请按住BOOT0键")
print("再按一下RESET键")
beep()
pg_init()
PERIPH_BASE = 0x40000000
AHB1PERIPH_BASE = PERIPH_BASE + 0x00020000
RCC_BASE = AHB1PERIPH_BASE + 0x3800
RCC_AHB1ENR = RCC_BASE + 0x30
RCC_AHB1Periph_GPIOA = (0x00000001)
RCC_AHB1Periph_GPIOB = (0x00000002)
RCC_AHB1Periph_GPIOC = (0x00000004)
RCC_AHB1Periph_GPIOD = (0x00000008)
RCC_AHB1Periph_GPIOE = (0x00000010)
RCC_AHB1Periph_GPIOF = (0x00000020)
RCC_AHB1Periph_GPIOG = (0x00000040)
RCC_AHB1Periph_GPIOH = (0x00000080)
RCC_AHB1Periph_GPIOI = (0x00000100)
RCC_AHB1Periph_GPIOJ = (0x00000200)
RCC_AHB1Periph_GPIOK = (0x00000400)
GPIOA = AHB1PERIPH_BASE + 0x0000
GPIOB = AHB1PERIPH_BASE + 0x0400
GPIOC = AHB1PERIPH_BASE + 0x0800
GPIOD = AHB1PERIPH_BASE + 0x0C00
GPIOE = AHB1PERIPH_BASE + 0x1000
GPIOF = AHB1PERIPH_BASE + 0x1400
GPIOG = AHB1PERIPH_BASE + 0x1800
GPIOH = AHB1PERIPH_BASE + 0x1C00
GPIOI = AHB1PERIPH_BASE + 0x2000
GPIOJ = AHB1PERIPH_BASE + 0x2400
GPIOK = AHB1PERIPH_BASE + 0x2800
MODER = 0x00
OTYPER = 0x04
OSPEEDR = 0x08
PUPDR = 0x0C
IDR = 0x10
ODR = 0x14
BSRRL = 0x18
BSRRH = 0x1A
LCKR = 0x1C
AFR0 = 0x20
AFR1 = 0x24
GPIO_Mode_IN = 0x00 --GPIO Input Mode
GPIO_Mode_OUT = 0x01 --GPIO Output Mode
GPIO_Mode_AF = 0x02 --GPIO Alternate function Mode
GPIO_Mode_AN = 0x03 --GPIO Analog Mode
GPIO_OSPEEDER_OSPEEDR0 = 0x00000003
GPIO_OTYPER_OT_0 = 0x00000001
GPIO_Low_Speed = 0x00 --/*!< Low speed */
GPIO_Medium_Speed = 0x01 --/*!< Medium speed */
GPIO_Fast_Speed = 0x02 --/*!< Fast speed */
GPIO_High_Speed = 0x03 --/*!< High speed */
GPIO_OType_PP = 0x00 --推挽输出
GPIO_OType_OD = 0x01 --开漏输出
GPIO_PUPDR_PUPDR0 = 0x00000003
GPIO_PuPd_NOPULL = 0x00
GPIO_PuPd_UP = 0x01
GPIO_PuPd_DOWN = 0x02
--开启GPIO时钟
function enable_gpio_clk(void)
rcc = RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC
| RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE
| RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOH
| RCC_AHB1Periph_GPIOI | RCC_AHB1Periph_GPIOJ | RCC_AHB1Periph_GPIOK
pg_write32(RCC_AHB1ENR, rcc)
end
--配置GPIO为推挽输出 (上下拉电阻未配置)
function config_gpio_out_pp(gpio, pin)
local moder
local otyper
local ospeedr
local pupdr
moder = pg_read32(gpio + MODER)
moder = moder & ~(0x03 << (pin * 2))
moder = moder | (GPIO_Mode_OUT << (pin * 2))
pg_write32(gpio + MODER, moder)
--Speed mode configuration
ospeedr = pg_read32(gpio + OSPEEDR)
ospeedr = ospeedr & ~(GPIO_OSPEEDER_OSPEEDR0 << (pin * 2))
ospeedr = ospeedr | (GPIO_High_Speed << (pin * 2))
pg_write32(gpio + OSPEEDR, ospeedr)
--Output mode configuration
otyper = pg_read32(gpio + OTYPER)
otyper = otyper & ~(GPIO_OTYPER_OT_0 << pin)
otyper = otyper | (GPIO_OType_PP << pin)
pg_write32(gpio + OTYPER, otyper)
--Pull-up Pull down resistor configuration*/
pupdr = pg_read32(gpio + PUPDR)
pupdr = pupdr & ~(GPIO_PUPDR_PUPDR0 << (pin * 2))
pupdr = pupdr | (pupdr << (pin * 2))
pg_write32(gpio + PUPDR, pupdr)
end
function set_gpio(gpio, pin, level)
if (level == 0) then
pg_write32(gpio + BSRRH, (1 << pin))
else
pg_write32(gpio + BSRRL, (1 << pin))
end
end
function ConfigFsmcOut(void)
config_gpio_out_pp(GPIOD, 0)
config_gpio_out_pp(GPIOD, 1)
config_gpio_out_pp(GPIOD, 4)
config_gpio_out_pp(GPIOD, 5)
config_gpio_out_pp(GPIOD, 8)
config_gpio_out_pp(GPIOD, 9)
config_gpio_out_pp(GPIOD, 10)
config_gpio_out_pp(GPIOD, 11)
config_gpio_out_pp(GPIOD, 12)
config_gpio_out_pp(GPIOD, 14)
config_gpio_out_pp(GPIOD, 15)
config_gpio_out_pp(GPIOE, 0)
config_gpio_out_pp(GPIOE, 1)
config_gpio_out_pp(GPIOE, 3)
config_gpio_out_pp(GPIOE, 4)
config_gpio_out_pp(GPIOE, 5)
config_gpio_out_pp(GPIOE, 7)
config_gpio_out_pp(GPIOE, 8)
config_gpio_out_pp(GPIOE, 9)
config_gpio_out_pp(GPIOE, 10)
config_gpio_out_pp(GPIOE, 11)
config_gpio_out_pp(GPIOE, 12)
config_gpio_out_pp(GPIOE, 13)
config_gpio_out_pp(GPIOE, 14)
config_gpio_out_pp(GPIOE, 15)
config_gpio_out_pp(GPIOF, 0)
config_gpio_out_pp(GPIOF, 1)
config_gpio_out_pp(GPIOF, 2)
config_gpio_out_pp(GPIOF, 3)
config_gpio_out_pp(GPIOF, 4)
config_gpio_out_pp(GPIOF, 5)
config_gpio_out_pp(GPIOF, 12)
config_gpio_out_pp(GPIOF, 13)
config_gpio_out_pp(GPIOF, 14)
config_gpio_out_pp(GPIOF, 15)
config_gpio_out_pp(GPIOG, 0)
config_gpio_out_pp(GPIOG, 1)
config_gpio_out_pp(GPIOG, 2)
config_gpio_out_pp(GPIOG, 3)
config_gpio_out_pp(GPIOG, 4)
config_gpio_out_pp(GPIOG, 5)
config_gpio_out_pp(GPIOG, 10)
end
--设置FSMC GPIO = 0
function SetFsmcGpio_0(void)
set_gpio(GPIOD, 0, 0)
set_gpio(GPIOD, 1, 0)
set_gpio(GPIOD, 4, 0)
set_gpio(GPIOD, 5, 0)
set_gpio(GPIOD, 8, 0)
set_gpio(GPIOD, 9, 0)
set_gpio(GPIOD, 10, 0)
set_gpio(GPIOD, 11, 0)
set_gpio(GPIOD, 12, 0)
set_gpio(GPIOD, 14, 0)
set_gpio(GPIOD, 15, 0)
set_gpio(GPIOE, 0, 0)
set_gpio(GPIOE, 1, 0)
set_gpio(GPIOE, 3, 0)
set_gpio(GPIOE, 4, 0)
set_gpio(GPIOE, 5, 0)
set_gpio(GPIOE, 7, 0)
set_gpio(GPIOE, 8, 0)
set_gpio(GPIOE, 9, 0)
set_gpio(GPIOE, 10, 0)
set_gpio(GPIOE, 11, 0)
set_gpio(GPIOE, 12, 0)
set_gpio(GPIOE, 13, 0)
set_gpio(GPIOE, 14, 0)
set_gpio(GPIOE, 15, 0)
set_gpio(GPIOF, 0, 0)
set_gpio(GPIOF, 1, 0)
set_gpio(GPIOF, 2, 0)
set_gpio(GPIOF, 3, 0)
set_gpio(GPIOF, 4, 0)
set_gpio(GPIOF, 5, 0)
set_gpio(GPIOF, 12, 0)
set_gpio(GPIOF, 13, 0)
set_gpio(GPIOF, 14, 0)
set_gpio(GPIOF, 15, 0)
set_gpio(GPIOG, 0, 0)
set_gpio(GPIOG, 1, 0)
set_gpio(GPIOG, 2, 0)
set_gpio(GPIOG, 3, 0)
set_gpio(GPIOG, 4, 0)
set_gpio(GPIOG, 5, 0)
set_gpio(GPIOG, 10, 0)
end
--设置FSMC GPIO = 1
function SetFsmcGpio_1(void)
set_gpio(GPIOD, 0, 1)
set_gpio(GPIOD, 1, 1)
set_gpio(GPIOD, 4, 1)
set_gpio(GPIOD, 5, 1)
set_gpio(GPIOD, 8, 1)
set_gpio(GPIOD, 9, 1)
set_gpio(GPIOD, 10, 1)
set_gpio(GPIOD, 11, 1)
set_gpio(GPIOD, 12, 1)
set_gpio(GPIOD, 14, 1)
set_gpio(GPIOD, 15, 1)
set_gpio(GPIOE, 0, 1)
set_gpio(GPIOE, 1, 1)
set_gpio(GPIOE, 3, 1)
set_gpio(GPIOE, 4, 1)
set_gpio(GPIOE, 5, 1)
set_gpio(GPIOE, 7, 1)
set_gpio(GPIOE, 8, 1)
set_gpio(GPIOE, 9, 1)
set_gpio(GPIOE, 10, 1)
set_gpio(GPIOE, 11, 1)
set_gpio(GPIOE, 12, 1)
set_gpio(GPIOE, 13, 1)
set_gpio(GPIOE, 14, 1)
set_gpio(GPIOE, 15, 1)
set_gpio(GPIOF, 0, 1)
set_gpio(GPIOF, 1, 1)
set_gpio(GPIOF, 2, 1)
set_gpio(GPIOF, 3, 1)
set_gpio(GPIOF, 4, 1)
set_gpio(GPIOF, 5, 1)
set_gpio(GPIOF, 12, 1)
set_gpio(GPIOF, 13, 1)
set_gpio(GPIOF, 14, 1)
set_gpio(GPIOF, 15, 1)
set_gpio(GPIOG, 0, 1)
set_gpio(GPIOG, 1, 1)
set_gpio(GPIOG, 2, 1)
set_gpio(GPIOG, 3, 1)
set_gpio(GPIOG, 4, 1)
set_gpio(GPIOG, 5, 1)
set_gpio(GPIOG, 10, 1)
end
function TeseFsmc(void)
local i
enable_gpio_clk()
config_gpio_out_pp(GPIOI, 10)
beep()
print("Test FSMC ...")
ConfigFsmcOut()
for i = 0, 10, 1 do
print(i)
SetFsmcGpio_0()
set_gpio(GPIOI, 10, 0)
delayms(2000)
SetFsmcGpio_1()
set_gpio(GPIOI, 10, 1)
delayms(2000)
end
beep()
end