stm32GPIOF_LED9、10; GPIOE_D10、D12
cpp
#include <stm32f4xx.h>
void delay(uint32_t ms)
{
int i,j;
for(i=0;i<ms;i++){
for(j=0;j<2500;j++);
}
}
int main()
{
//GPIOF9、10
// 指向RCC_AHB1ENR寄存器
volatile uint32_t *RCC_AHB1ENR=(uint32_t *)(0x40023800+0x30);
// 指向GPIOF_MODER寄存器
volatile uint32_t *GPIOF_MODER = (uint32_t *)(0x40021400 + 0x00);
// 指向GPIOF_OTYPER寄存器
volatile uint32_t *GPIOF_OTYPER = (uint32_t *)(0x40021400 + 0x04);
// 指向GPIOF_OSPEEDR寄存器
volatile uint32_t *GPIOF_OSPEEDR = (uint32_t *)(0x40021400 + 0x08);
// 指向GPIOF_PUPDR寄存器
volatile uint32_t *GPIOF_PUPDR = (uint32_t *)(0x40021400 + 0x0C);
// 指向GPIOF_ODR寄存器
volatile uint32_t *GPIOF_ODR = (uint32_t *)(0x40021400 + 0x14);
//GPIOE_D10、D11
// 指向GPIOE_MODER寄存器
volatile uint32_t *GPIOE_MODER = (uint32_t *)(0x40021000 + 0x00);
// 指向GPIOE_OTYPER寄存器
volatile uint32_t *GPIOE_OTYPER = (uint32_t *)(0x40021000 + 0x04);
// 指向GPIOE_OSPEEDR寄存器
volatile uint32_t *GPIOE_OSPEEDR = (uint32_t *)(0x40021000 + 0x08);
// 指向GPIOE_PUPDR寄存器
volatile uint32_t *GPIOE_PUPDR = (uint32_t *)(0x40021000 + 0x0C);
// 指向GPIOE_ODR寄存器
volatile uint32_t *GPIOE_ODR = (uint32_t *)(0x40021000 + 0x14);
//使能GPIOF时钟
*RCC_AHB1ENR |= 1<<5;
// 设置GPIOF9为输出模式
*GPIOF_MODER &= ~(0x03 << (9 * 2));
*GPIOF_MODER |= (0x01 << (9 * 2));
// 设置GPIOF9为推挽输出
*GPIOF_OTYPER &= ~(0x01 << 9);
// 设置GPIOF9的速度为高速
*GPIOF_OSPEEDR |= (0x03 << (9 * 2));
// 设置GPIOF9为无上拉/下拉
*GPIOF_PUPDR &= ~(0x03 << (9 * 2));
// 设置GPIOF10为输出模式
*GPIOF_MODER &= ~(0x03 << (10 * 2));
*GPIOF_MODER |= (0x01 << (10 * 2));
// 设置GPIOF10为推挽输出
*GPIOF_OTYPER &= ~(0x01 << 10);
// 设置GPIOF10的速度为高速
*GPIOF_OSPEEDR |= (0x03 << (10 * 2));
// 设置GPIOF10为无上拉/下拉
*GPIOF_PUPDR &= ~(0x03 << (10 * 2));
//使能GPIOE时钟
*RCC_AHB1ENR |= 1<<4;
// 设置GPIOED_10为输出模式
*GPIOE_MODER &= ~(0x03 << (13 * 2));
*GPIOE_MODER |= (0x01 << (13 * 2));
// 设置GPIOF10为推挽输出
*GPIOE_OTYPER &= ~(0x01 << 13);
// 设置GPIOF10的速度为高速
*GPIOE_OSPEEDR |= (0x03 << (13 * 2));
// 设置GPIOF10为无上拉/下拉
*GPIOE_PUPDR &= ~(0x03 << (13 * 2));
// 设置GPIOED_11为输出模式
*GPIOE_MODER &= ~(0x03 << (14 * 2));
*GPIOE_MODER |= (0x01 << (14 * 2));
// 设置GPIOED_11为推挽输出
*GPIOE_OTYPER &= ~(0x01 << 14);
// 设置GPIOED_11的速度为高速
*GPIOE_OSPEEDR |= (0x03 << (14 * 2));
// 设置GPIOED_11为无上拉/下拉
*GPIOE_PUPDR &= ~(0x03 << (14 * 2));
while(1){
// 亮 ----- GPIOF9输出低电平
*GPIOF_ODR &= ~(0x01 << 9);
delay(500);
//灭 ----- GPIOF9输出高电平
*GPIOF_ODR |= (0x01 << 9);
delay(500);
// 亮 ----- GPIOF10输出低电平
*GPIOF_ODR &= ~(0x01 << 10);
delay(500);
//灭 ----- GPIOF10输出高电平
*GPIOF_ODR |= (0x01 << 10);
delay(500);
// 亮 ----- GPIOE_D10输出低电平
*GPIOE_ODR &= ~(0x01 << 13);
delay(500);
//灭 ----- GPIOF9输出高电平
*GPIOE_ODR |= (0x01 << 13);
delay(500);
// 亮 ----- GPIOF9输出低电平
*GPIOE_ODR &= ~(0x01 << 14);
delay(500);
//灭 ----- GPIOF9输出高电平
*GPIOE_ODR |= (0x01 << 14);
delay(500);
}
}
流水綫
cpp
#include <stm32f4xx.h>
void delay(uint32_t ms)
{
int i,j;
for(i=0;i<ms;i++){
for(j=0;j<2500;j++);
}
}
int main()
{
//GPIOF9、10
// 指向RCC_AHB1ENR寄存器
volatile uint32_t *RCC_AHB1ENR=(uint32_t *)(0x40023800+0x30);
// 指向GPIOF_MODER寄存器
volatile uint32_t *GPIOF_MODER = (uint32_t *)(0x40021400 + 0x00);
// 指向GPIOF_OTYPER寄存器
volatile uint32_t *GPIOF_OTYPER = (uint32_t *)(0x40021400 + 0x04);
// 指向GPIOF_OSPEEDR寄存器
volatile uint32_t *GPIOF_OSPEEDR = (uint32_t *)(0x40021400 + 0x08);
// 指向GPIOF_PUPDR寄存器
volatile uint32_t *GPIOF_PUPDR = (uint32_t *)(0x40021400 + 0x0C);
// 指向GPIOF_ODR寄存器
volatile uint32_t *GPIOF_ODR = (uint32_t *)(0x40021400 + 0x14);
//GPIOE_D10、D11
// 指向GPIOE_MODER寄存器
volatile uint32_t *GPIOE_MODER = (uint32_t *)(0x40021000 + 0x00);
// 指向GPIOE_OTYPER寄存器
volatile uint32_t *GPIOE_OTYPER = (uint32_t *)(0x40021000 + 0x04);
// 指向GPIOE_OSPEEDR寄存器
volatile uint32_t *GPIOE_OSPEEDR = (uint32_t *)(0x40021000 + 0x08);
// 指向GPIOE_PUPDR寄存器
volatile uint32_t *GPIOE_PUPDR = (uint32_t *)(0x40021000 + 0x0C);
// 指向GPIOE_ODR寄存器
volatile uint32_t *GPIOE_ODR = (uint32_t *)(0x40021000 + 0x14);
//使能GPIOF时钟
*RCC_AHB1ENR |= 1<<5;
// 设置GPIOF9为输出模式
*GPIOF_MODER &= ~(0x03 << (9 * 2));
*GPIOF_MODER |= (0x01 << (9 * 2));
// 设置GPIOF9为推挽输出
*GPIOF_OTYPER &= ~(0x01 << 9);
// 设置GPIOF9的速度为高速
*GPIOF_OSPEEDR |= (0x03 << (9 * 2));
// 设置GPIOF9为无上拉/下拉
*GPIOF_PUPDR &= ~(0x03 << (9 * 2));
// 设置GPIOF10为输出模式
*GPIOF_MODER &= ~(0x03 << (10 * 2));
*GPIOF_MODER |= (0x01 << (10 * 2));
// 设置GPIOF10为推挽输出
*GPIOF_OTYPER &= ~(0x01 << 10);
// 设置GPIOF10的速度为高速
*GPIOF_OSPEEDR |= (0x03 << (10 * 2));
// 设置GPIOF10为无上拉/下拉
*GPIOF_PUPDR &= ~(0x03 << (10 * 2));
//使能GPIOE时钟
*RCC_AHB1ENR |= 1<<4;
// 设置GPIOED_10为输出模式
*GPIOE_MODER &= ~(0x03 << (13 * 2));
*GPIOE_MODER |= (0x01 << (13 * 2));
// 设置GPIOF10为推挽输出
*GPIOE_OTYPER &= ~(0x01 << 13);
// 设置GPIOF10的速度为高速
*GPIOE_OSPEEDR |= (0x03 << (13 * 2));
// 设置GPIOF10为无上拉/下拉
*GPIOE_PUPDR &= ~(0x03 << (13 * 2));
// 设置GPIOED_11为输出模式
*GPIOE_MODER &= ~(0x03 << (14 * 2));
*GPIOE_MODER |= (0x01 << (14 * 2));
// 设置GPIOED_11为推挽输出
*GPIOE_OTYPER &= ~(0x01 << 14);
// 设置GPIOED_11的速度为高速
*GPIOE_OSPEEDR |= (0x03 << (14 * 2));
// 设置GPIOED_11为无上拉/下拉
*GPIOE_PUPDR &= ~(0x03 << (14 * 2));
while(1){
// 亮 ----- GPIOF9输出低电平
*GPIOF_ODR &= ~(0x01 << 9);
delay(500);
// 亮 ----- GPIOF10输出低电平
*GPIOF_ODR &= ~(0x01 << 10);
delay(500);
// 亮 ----- GPIOE_D10输出低电平
*GPIOE_ODR &= ~(0x01 << 13);
delay(500);
// 亮 ----- GPIOF9输出低电平
*GPIOE_ODR &= ~(0x01 << 14);
delay(500);
//灭 ----- GPIOF9输出高电平
*GPIOF_ODR |= (0x01 << 9);
//灭 ----- GPIOF10输出高电平
*GPIOF_ODR |= (0x01 << 10);
//灭 ----- GPIOF9输出高电平
*GPIOE_ODR |= (0x01 << 13);
//灭 ----- GPIOF9输出高电平
*GPIOE_ODR |= (0x01 << 14);
delay(500);
delay(500);
}
}
蜂鸣器
cpp
#include <stm32f4xx.h>
void delay(uint32_t ms)
{
int i,j;
for(i=0;i<ms;i++){
for(j=0;j<2500;j++);
}
}
int main()
{
//RCC時鐘
// 指向RCC_AHB1ENR寄存器
volatile uint32_t *RCC_AHB1ENR=(uint32_t *)(0x40023800+0x30);
volatile uint32_t *GPIOF_MODER=(uint32_t *)(0x40021400+0x00);
volatile uint32_t *GPIOF_OTYPER=(uint32_t *)(0x40021400+0x04);
volatile uint32_t *GPIOF_OSPEEDR=(uint32_t *)(0x40021400+0x08);
volatile uint32_t *GPIOF_PUPDR=(uint32_t *)(0x40021400+0x0C);
volatile uint32_t *GPIOF_ODR=(uint32_t *)(0x40021400+0x14);
*RCC_AHB1ENR|=1<<5;
*GPIOF_MODER&=~(0x03<<(2*8));
*GPIOF_MODER|=(0x01<<(2*8));
*GPIOF_OTYPER&=~(0x03<<(8));
*GPIOF_OSPEEDR&=~(0x02<<(2*8));
*GPIOF_PUPDR&=~(0x03<<(2*8));
while(1){
// 蜂鳴 ----- GPIOF8输出低电平
*GPIOF_ODR &= ~(0x01 << 8);
delay(500);
//停止 ----- GPIOF8输出高电平
*GPIOF_ODR |= (0x01 << 8);
delay(500);
}
}