stm32f030的GPIOB的PIN10的翻转代码,使用寄存器操作
时间: 2024-02-20 10:57:23 浏览: 24
好的,以下是使用寄存器操作的 STM32F030 GPIOB PIN10 翻转代码:
```c
#include "stm32f030x6.h"
int main(void)
{
// 使能 GPIOB 时钟
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
// 配置 GPIOB PIN10 为输出模式
GPIOB->MODER |= GPIO_MODER_MODER10_0; // 设置为输出模式
while(1)
{
// 翻转 GPIOB PIN10 的电平
GPIOB->ODR ^= GPIO_ODR_10; // 异或操作,翻转电平
// 延时一段时间
for(int i = 0; i < 1000000; i++);
}
}
```
上述代码中,我们首先使能了 GPIOB 的时钟,并将 GPIOB PIN10 配置为输出模式。然后,我们进入一个无限循环,在循环中翻转了 GPIOB PIN10 的电平,并添加了一个简单的延时以控制翻转的频率。这里使用了异或操作实现了翻转功能。
相关问题
使用MicroPython的语法编写ESP32通过IIC的通讯方式与STM32103ZET6进行数据传输的代码和寄存器版本的STM32与ESP32进行IIC通信的代码
ESP32与STM32通过I2C进行通信的MicroPython代码:
ESP32端代码:
```python
from machine import I2C, Pin
i2c = I2C(scl=Pin(22), sda=Pin(21))
address = 0x3A # STM32的I2C地址
data_out = bytearray([0x01, 0x02, 0x03, 0x04, 0x05]) # 发送的数据
i2c.writeto(address, data_out) # 发送数据
```
STM32端代码:
```c
#include "stm32f10x.h"
#include "stdio.h"
#define I2C_SLAVE_ADDRESS 0x3A
#define I2C_SPEED 100000
#define I2C GPIOB
#define I2C_SCL GPIO_Pin_6
#define I2C_SDA GPIO_Pin_7
uint8_t data_in[5];
void I2C_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = I2C_SCL | I2C_SDA;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(I2C, &GPIO_InitStructure);
I2C_DeInit(I2C1);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
I2C_Init(I2C1, &I2C_InitStructure);
I2C_Cmd(I2C1, ENABLE);
}
void I2C_Read(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t NumByteToRead)
{
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, I2C_SLAVE_ADDRESS, I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1, ReadAddr);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, I2C_SLAVE_ADDRESS, I2C_Direction_Receiver);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
while(NumByteToRead)
{
if(NumByteToRead == 1)
{
I2C_AcknowledgeConfig(I2C1, DISABLE);
I2C_GenerateSTOP(I2C1, ENABLE);
}
if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))
{
*pBuffer = I2C_ReceiveData(I2C1);
pBuffer++;
NumByteToRead--;
}
}
I2C_AcknowledgeConfig(I2C1, ENABLE);
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
I2C_Config();
I2C_Read(data_in, 0x00, 5);
for(int i=0; i<5; i++)
{
printf("data_in[%d]: %d\n", i, data_in[i]);
}
while(1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_0);
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
}
}
```
其中,STM32的I2C地址为0x3A,ESP32的I2C地址为0x3A。在ESP32端,首先定义了一个I2C对象,然后指定了STM32的I2C地址。接着定义了要发送的数据,使用writeto()函数将数据发送给STM32。在STM32端,首先配置了I2C引脚和速率,然后定义了一个I2C_Read()函数用于读取从ESP32发送过来的数据。在主函数中,先将PA0引脚配置为输出模式,并将其翻转以作为调试信号。然后调用I2C_Read()函数读取ESP32发送过来的数据,并在串口上输出。最后进入死循环。
stm32中io口电平反转实现灯的亮灭的代码
您可以使用STM32的寄存器直接控制IO口的状态和电平反转。以下是示例代码:
```c
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
int main(void)
{
// 开启GPIO的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// 配置LED的GPIO为推挽输出模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 不断翻转LED的电平
while (1)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_SET);
Delay(1000);
GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_RESET);
Delay(1000);
}
}
void Delay(__IO uint32_t nCount)
{
for (; nCount != 0; nCount--);
}
```
您可以根据需要修改GPIO口的编号、时间延迟和电平状态等参数,实现灯的亮灭效果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)